C++宏"如果定义了类"

top*_*dev 9 c++ macros c-preprocessor

在C++中是否有这样的宏(交叉编译器或特定于编译器):

#if isclass(NameSpace::MyClass)
Run Code Online (Sandbox Code Playgroud)

会有用的.

Jam*_*lis 10

否.预处理程序和宏由预处理程序进行评估,预处理程序在将代码解析为C++之前完成其任务.预处理器不了解类或命名空间.


cut*_*CAT 8

如果您不关心可移植性,VC++中的__if_exists语句可满足您的需求.


Gre*_*osz 5

在预处理阶段没有这样的东西,所以没有宏.

但是,您可以查看Boost或C++ 0x中可用is_class类型特征,这些特性使您能够在编译时做出决策.

  • 我认为这里的问题是`Namespace :: MyClass`必须被声明为某个东西,即使它不是一个类? (2认同)

sou*_*rge 5

这是不可能的,但您可以使用包含保护常量来验证该类是否已包含在内.

  • 到了什么问题? (3认同)