cpp*_*ame 3 c++ macros preprocessor-directive
我想将MyNamespace ::附加到宏定义的函数:
#define transFunc(func) \
dimensionedScalar func(const dimensionedScalar& ds) \
{ \
if (!ds.dimensions().dimensionless()) \
{ \
FatalErrorIn(#func "(const dimensionedScalar& ds)") \
<< "ds not dimensionless" \
<< abort(FatalError); \
} \
\
return dimensionedScalar \
( \
#func "(" + ds.name() + ')', \
dimless, \
MyNameSpace::##func(ds.value()) \
);
\
Run Code Online (Sandbox Code Playgroud)
}
但是当我打电话时
transFunc(Foo)
Run Code Online (Sandbox Code Playgroud)
编译器抛出以下错误:
粘贴"::"和"Foo"不会提供有效的预处理令牌
我上面连接令牌的方式有什么问题?
##用于将两个令牌组合在一起以制作单个令牌.所以类似的东西func##1会扩展到单个令牌func1.
在这里使用它,它试图一起躲避::并Foo制作一个令牌::Foo.正如错误所说,这不是有效的令牌.你不想在这里有一个令牌; 你只想保持两个令牌分开:
MyNameSpace::func(ds.value())
Run Code Online (Sandbox Code Playgroud)