用预处理器#define替换范围标识符

时间:2013-06-25 22:15:28

标签: c++ namespaces c-preprocessor identifier

我想基于预处理器定义声明对象的类型。问题是对象类型是使用命名空间限定的:

OldNamespace1::OldNamespace2::OldClass MyObject;

现在定义__unit_test时,我希望编译器看到:

NewNamespace1::NewNamespace2::NewClass MyObject;

我有OldClass的源代码,但我在OldNamespace1中没有任何内容。我知道我可以使用#ifdef条件包含显然可以做到这一点,但这会在整个代码中需要很多#ifdef。有没有办法只使用一个(可能是复合的)#define

1 个答案:

答案 0 :(得分:2)

您可以像这样定义命名空间:

#ifdef __unit_test
namespace myns = NewNamespace1::NewNamespace2;
class myclass : public NewClass {};
#else
namespace myns = OldNamespace1::OldNamespace2;
class myclass : public OldClass {};
#endif

现在您只需通过以下方式定义对象:

myns::myclass MyObject;