gpt4 book ai didi

c++ - 用预处理器 #define 替换作用域标识符

转载 作者:行者123 更新时间:2023-11-28 03:14:39 29 4
gpt4 key购买 nike

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

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;

关于c++ - 用预处理器 #define 替换作用域标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17308511/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com