草庐IT

c++ - 在宏的帮助下创建类属性

我需要创建一些机制来允许我声明类属性(即:成员变量),除了通常的类成员访问之外,还可以通过它们的名称访问这些属性。Qt使用非常方便的Q_PROPERTY宏解决了这个问题,该宏的另一端由moc消化。我没有这两步编译的奢侈,我能得到的最接近的是:classSomeClass{public:SomeClass():bla(9),v(9.4){}virtual~SomeClass(){}intbla;doublev;BEGIN_ATTRIBUTES(SomeClass)ATTRIBUTE(int,bla)ATTRIBUTE(double,v)END_ATTRIBUTES()};其中有明显的宏隐

c++ - 在宏中包装模板函数调用,或避免特化 void 返回

我有以下功能,允许我包装OpenGL命令并在出现问题时记录:templatestructChecker{staticResrun(conststd::string&function_name,Func&&func,Args&&...args){Resresult=func(std::forward(args)...);check_and_log_error(function_name);returnresult;}};templatestructChecker{staticvoidrun(conststd::string&function_name,Func&&func,Args&&.

c++ - 在#include 中获取当前编译单元名称

我当前的目标是创建一行(或尽可能少的)代码,将事件编译单元的其余部分切换到未优化的调试配置。我的第一直觉是:FORCE_DEBUG;//codebelowherewillbeforcedtobeunoptimizedandinadebugenvironment或#include"ForceDebug.h"//codebelowherewillbeforcedtobeunoptimizedandinadebugenvironment会很理想。在我的工作区中,要转换为未优化的调试配置,我需要更改pragma优化级别,还需要#undef一些宏和#define其他宏。FORCE_DEBUG宏不

c++ - 使用 boost 预处理实例化模板函数和类

使用看似标准的w,x,y,z演示,假设我有以下宏试图转换为“可迭代”预处理器宏#defineINSTANTIATE_FUNC(rtype,func_name,...)\templatertypefunc_name(__VA_ARGS__);\templatertypefunc_name(__VA_ARGS__);\templatertypefunc_name(__VA_ARGS__);\templatertypefunc_name(__VA_ARGS__);为了完整起见,假设我们正在尝试实例化以下内容structw{staticconstexprintdata=0;};structx{

C++ 重载宏

我看到了重载宏的不同解决方案和变通方法。但是我在这方面似乎有困难。我有一个打印到visualstudio调试器的PRINT_DEBUG宏:#defineDEBUG_PRINT(message,...)_RPTN(0,message"\n",__VA_ARGS__)现在说我想像这样重载它:#defineDEBUG_PRINT(message)_RPT0(0,message"\n")#defineDEBUG_PRINT(message,...)_RPTN(0,message"\n",__VA_ARGS__)这当然行不通,因为它会选择第一个宏。所以我检查了其他主题并找到了这个solution

c++ - 定义中的模板函数

我有一些模板函数,我想在C++中使用define调用它:#defineCONFIG(key,type,def)getValue(key,def);当然不行。我可以做这样的东西吗? 最佳答案 它工作正常:templateTgetValue(int,int){returnT();}#defineCONFIG(key,type,def)getValue(key,def);intmain(){CONFIG(1,int,2);return0;} 关于c++-定义中的模板函数,我们在StackOve

c++ - "-D__STDC_FORMAT_MACROS"gnu 编译器选项

我正在清理我的Makefile并试图了解那里实际发生了什么。我遇到了上述选项。它必须启用一些宏来保证与旧C库的兼容性,但我找不到它的用途。gnu编译器(g++)选项是什么g++-D__STDC_FORMAT_MACROS意思还是做?g++甚至有必要吗?PS:我在Linux下工作 最佳答案 感谢Nick的链接,我得出结论,g++不需要它。它与C的inttype.h和printf有关。来自链接Inparticular,thesymbol__STDC_FORMAT_MACROS,mentionedinfootnote182oftheCst

c++ - 并行迭代宏的替代方案?

这将是一个很长的故事,但也许你们中的一些人愿意研究这个案例。我正在从事并行图算法开发。我选择了一个名为STINGER的尖端HPC并行图数据结构。.STINGER的使命声明如下:"STINGERshouldprovideacommonabstractdatastructuresuchthatthelargegraphcommunitycanquicklyleverageeachothers'researchdevelopments.[...] AlgorithmswrittenforSTINGERcaneasilybetranslated/portedbetweenmultiplelan

c++ - 使 C++ 自定义 foreach 宏更干净

我有一个自定义的C++宏来模拟foreach循环:#defineforeach(TYPE,ELEMENT,COLLECTION_TYPE,COLLECTION)\for(COLLECTION_TYPE::iteratorELEMENT##__MACRO_TEMP_IT=COLLECTION.begin();ELEMENT##__MACRO_TEMP_IT!=COLLECTION.end();ELEMENT##__MACRO_TEMP_IT++)\{TYPEELEMENT=*(ELEMENT##__MACRO_TEMP_IT);我知道有其他方法可以执行foreach循环-通过使用C++1

c++ - 是否可以从宏定义宏

这是我的想法。#defineprefix_11#defineprefix_22#defineprefix_33我想使用上面的前缀定义一个宏——比如宏macro_prefix_1macro_prefix_2——我希望它们变成macro_1macro_2等,就像下面的代码#definemacro_##prefix_1I_am_macro_1#definemacro_##prefix_2I_am_macro_2这可能吗? 最佳答案 不幸的是,你想做的事是不可能的。(##)指令不可能在宏声明中使用。只能在定义中使用它。#defineglue