是否可以使用预处理器函数创建其他 #define?
Can I create other #define's with a preprocessor function?
我知道问完这个我会受到惩罚,我仍然想做这样的事情:
#define DEF_CLASS(x)
#define CLASS x
#define CONSTRUCTOR CLASS::CLASS
#define COPY_CONSTRUCTOR(x) CONSTRUCTOR(const CLASS& x)
也就是说,我想要一个动态定义其他"#defines"的"#define"函数。
我有一个无法重构的IDE,此外,由于其特殊作用,我想使构造函数,尤其是复制构造函数脱颖而出。
因此,我的目标是像这样对我的 c++ 类定义进行编程:
CONSTRUCTOR(int i):i(i){}
COPY_CONSTRUCTOR(other):i(other.i){}
void CLASS::fun1()
{
//...
}
为此,目前我需要复制和粘贴三行 #define。我宁愿自动执行这些操作。有没有办法使用预处理器做到这一点?
否 -- §16.3.4/3:
生成的完全宏替换的预处理令牌序列不会作为预处理指令进行处理,即使它类似于一个 [...]
不,这样的DEF_CLASS(x)
宏是不可能的。宏不是有状态的。你能做的最好的事情就是:
#define CONSTRUCTOR CLASS::CLASS
#define COPY_CONSTRUCTOR(x) CONSTRUCTOR(const CLASS& x)
...
#define CLASS X
CONSTRUCTOR(int i):i(i){}
COPY_CONSTRUCTOR(other):i(other.i){}
void CLASS::fun1()
{
//...
}
#undef CLASS
#define CLASS Y
CONSTRUCTOR(int i):i(i){}
COPY_CONSTRUCTOR(other):i(other.i){}
void CLASS::fun1()
{
//...
}
#undef CLASS
但我强烈建议您不要像这样滥用预处理器。为什么要用这些宏混淆正常的C++语法?接受C++的本质;不要试图把它变成一种不同的、更友好的语言。
相关文章:
- 在其他文件中创建类时在 c++ 项目中不起作用
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 具有包含其他对象的类的对象创建顺序
- 如何创建没有特定定义的随机分布?uniform_int_distribution是从其他类继承的吗?
- 如何使用模板化类创建其他类的实例?
- MOVNTI 存储是否相对于由同一线程创建的其他 MOVNTI 存储重新排序?
- 如何在不使用new的情况下保持在其他对象中创建的对象存活?
- 通过向构造函数其他对象引用页面来创建对象
- 创建一个 const std::vector ,其中包含另一个 const std::vector 和其他值
- 如何创建一个接口,允许我访问C++中的按钮(和其他ui)函数,该函数是使用python中的MFC实现的
- 如何创建一个函数来执行其中的其他函数
- 如何创建可以包含不同小部件的QVector或其他容器
- 如何引用或调用在 c++ 中的其他 while 循环中创建的向量?
- 如何在 Linux 中通过 C/C++ 以其他用户身份创建文件?
- 创建并编译基类以在其他 C++ 项目 (ROS) 中使用
- 创建实例化所有其他类和子系统的类的目的是什么
- 如果创建支持返回可变参数类型列表的通用模板 API,我应该使用 std::tuple 还是其他东西?
- 是否可以使用预处理器函数创建其他 #define?
- C++模板类,用于创建其他类的实例
- OO 正确性 - 继承层次结构 - 谁创建其他对象使用的对象