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

OldNamespace1::OldNamespace2::OldClass MyObject;

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

NewNamespace1::NewNamespace2::NewClass MyObject;

我有OldClass的资源,但在OldNamespace1中我什么都不拥有。我知道我显然可以使用#ifdef条件包含来做到这一点,但这在整个代码中将需要很多#ifdef。有没有办法只使用一个(可能是复合的)#define

最佳答案

您也许可以定义这样的名称空间:

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


现在,您可以通过以下方式简单地定义对象:

myns::myclass MyObject;

10-07 14:57