C ++中是否存在此类宏(交叉编译器或特定于编译器):
#if isclass(NameSpace::MyClass)
会很有用。
答案 0 :(得分:10)
没有。预处理程序和宏由预处理程序进行评估,预处理程序在将代码解析为C ++之前完成其任务。预处理器不了解类或命名空间。
答案 1 :(得分:8)
如果您不关心可移植性,VC ++中的__if_exists语句可满足您的需求。
答案 2 :(得分:5)
在预处理阶段没有这样的东西,所以没有宏。
但是,您可以查看is_class
类型特征available in Boost或C ++ 0x,以便您在编译时做出决定。
答案 3 :(得分:5)
这是不可能的,但您可以使用include guard常量来验证该类是否已包含在内。
答案 4 :(得分:2)
听起来我觉得最好测试一下你正在寻找的带有类定义的头文件是否已被包含,而不是试图查看该类是否存在。如果您已经实现了为每个头文件定义符号的标准,那么检查这个很容易,如图所示:
// myfile.h
#ifndef _MYFILE_H_
#define _MYFILE_H_
// CODE
#endif // _MYFILE_H_
您最好的选择是,确保您的头文件首先包含在正确的顺序中。最简单的方法是使用“整体”头文件,然后按正确的顺序包含所需的所有头文件。只需将其包含在项目的每个源文件中,就可以了。这不一定是最好的解决方案,但它是最简单的。