jjzjj

C++ 宏算术

我必须处理宏(它是宏调用宏;所以模板是不可能的)。这是我想要的:foo(3,a,b1,c1)-->foo1(a,b1,c1);foo(5,a,b1,c1,b2,c2)->foo2(a,b1,c1,b2,c2);foo(7,a,b1,c1,b2,c2,b3,c3)->foo3(a,b1,c1,b2,c2,b3,c3);所以基本上,我想要的是能够在宏展开时执行“函数”n->(n-1)/2。这可能吗?[PS,如果你不喜欢我的问题;我支持你投反对票的权利;到目前为止我最糟糕的问题只有-17,所以也许我们可以打破这个记录;但是,请告诉我为什么我的问题在技术上是无效的。]编辑:Foo接受一个可变参

c++ - 如何找出这个预处理器宏是否存在?

我想知道如何确定预处理器宏__PRETTY_FUNCTION__是否可以与给定的编译器一起使用(因为它应该是非标准的)。我如何在头文件中检查它?我想做的是这样的:#ifndef__PRETTY_FUNCTION__#define__PRETTY_FUNCTION____func__#endif但是,我猜预处理器会为每个函数定义宏,所以我想知道__PRETTY_FUNCTION__是否有任何意义(不同于__FILE__或__LINE__)在一个函数之外。这是真的还是我可以只使用上面的代码?如果没有,我该如何检查?编辑:我试过了。__PRETTY_FUNCTION__在函数外部未定义(我没

c++ - 是否可以检测 C++ 中的 namespace 成员身份?

对于C++类型,header为我们提供了许多有用的编译时反射功能。例如。std::is_base_of::value在编译时确定是否B是D的基类.我想知道是否可以按照类似的方式检测命名空间成员资格?例如。给定一个命名空间N类型T,有没有办法确定是否T包含在N中使用IS_NAMESPACE_MEMBER_OF(T,N)形式的宏表达式.我更喜欢通过任何类型的SFINAE/ADL类型的技巧获得编译时答案。或者,如果这是不可能的,那么标准不允许这样做的某种推理。一个不可移植的运行时hack是正则表达式typeid(T).name()对于N,但这相当乏味,而且不是在编译时。EDIT1:正如K-b

c++ - 在资源中连接定义和字符串

我有一个资源文件,需要用连接宏和字符串创建字符串定义,就像这样#define_STRINGIZE(n)#n#defineSTRINGIZE(n)_STRINGIZE(n)#defineWord_Word100DIALOGEX0,0,172,118STYLEDS_SETFONT|DS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_SYSMENUCAPTION"Hello"STRINGIZE(Word_)=>"Hello"Word"但需要没有平均引号的简单“HelloWord”。 最佳答案 对于任何关心的人:.rc

c++ - 使用模板进行宏扩展

我正在编写几个将模板函数的结果作为输入的函数:intalg1(Vect3){...}...intalgN(Vect3){...}voidmain(){alg1(mat.topRightCorner())}哪里,如果你好奇,topRightCorner返回mat的子矩阵,来自Eigen的方法,其中维度在编译时已知时作为模板参数放置。但是使用宏创建一个“快捷方式”以在不同算法之间快速切换(因为在实际代码中该函数被多次调用),就像这样#defineALG(X)(algN(X))ALG(mat.topRightCorner())给出了一个错误,因为宏被正确扩展但不知何故被误解为有两个不同的参数

C++:宏扩展解释

我正在阅读一个C++头文件,其中写道:classCLASSEXPORTskExecutable:{.....}评论说CLASSEXPORT是一个宏展开,然后我找到了CLASSEXPORT的定义位置。#defineCLASSEXPORT仅此而已..我对此感到困惑..CLASSEXPORT在这个意义上代表什么?以及如何理解skExecutable类? 最佳答案 在你的例子中,CLASSEXPORT扩展为空(可能是因为不需要将其扩展为在您的确切配置中有意义的东西),所以您的类(class)将只是一个classskExecutable{};

c++ - C/C++ 预处理器中宽字符串文字的宏参数字符串化

C预处理器有一个叫做stringification的特性.这是一个允许从宏参数创建(窄)字符串文字的功能。可以这样使用:#definePRINTF_SIZEOF(x)printf("sizeof(%s)==%d",#x,sizeof(x))/*stringification^^*/使用示例:PRINTF_SIZEOF(int);...可能打印:sizeof(int)==4如何从宏参数创建一个宽字符串文字?换句话说,我该如何实现WPRINTF_SIZEOF?#defineWPRINTF_SIZEOF(x)wprintf() 最佳答案

c++ - 包含#pragma 的宏定义

我正在尝试定义以下宏:#ifdefined(_MSC_VER)#definePRAGMA_PACK_PUSH(n)__pragma(pack(push,n))#definePRAGMA_PACK_POP()__pragma(pack(pop))#else#definePRAGMA_PACK_PUSH(n)#pragma(pack(push,n))#definePRAGMA_PACK_POP()#pragma(pack(pop))#endif但我在Linux上遇到以下错误-error:'#'isnotfollowedbyamacroparameter#definePRAGMA_PACK_

c++ - 编写一个函数,通过判断每个参数的类型自动确定其返回值

max()中的函数header不支持不同数据类型的两个参数。所以我尝试使用template编写自己的代码和#if,#else和#endif宏。到目前为止我的代码:#includetemplate#ifsizeof(type1)>=sizeof(type2)type1max(type1a,type2b){return(a>b)?a:b;}#elsetype2max(type1,type2){return(a>b)?a:b;}#endifintmain(){inta,d;longlongb,c;std::cin>>a>>b;std::cout>c>>d;std::cout现在显然代码无效,

c++ - "&0xFFFFFFFF"在此 HIDWORD 宏中的作用是什么

我正在制作的程序需要HIDWORD宏,并在此处找到了这个宏:http://gnuwin32.sourceforge.net/compile.html我很困惑的是为什么它的末尾有一个&0xFFFFFFFF?#defineHIDWORD(l)((DWORD)(((DWORDLONG)(l)>>32)&0xFFFFFFFF))这如何以任何方式修改此宏的输出? 最佳答案 我认为它没有任何实际效果-(DWORD)强制转换无论如何,表达式的最终操作会将结果强制为32位。(DWORDLONG)转换强制对无符号值进行移位操作,因此不会将“符号位”移