我想基于预处理器定义声明对象的类型。问题是对象类型是使用命名空间限定的:
OldNamespace1::OldNamespace2::OldClass MyObject;
现在定义__unit_test
时,我希望编译器看到:
NewNamespace1::NewNamespace2::NewClass MyObject;
我有OldClass的源代码,但我在OldNamespace1
中没有任何内容。我知道我可以使用#ifdef
条件包含显然可以做到这一点,但这会在整个代码中需要很多#ifdef
。有没有办法只使用一个(可能是复合的)#define
?
答案 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;