0

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

OldNamespace1::OldNamespace2::OldClass MyObject;

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

NewNamespace1::NewNamespace2::NewClass MyObject;

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

4

1 回答 1

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;
于 2013-06-25T22:27:37.217 回答