如何创建宏实现布尔变量、前置变量声明及值同步?
需求可行,以下是实现方案
你可以通过C++预处理器的宏拼接(##操作符)来实现需求,甚至可以优化成更易维护的形式,具体分两种方式:
方式一:独立宏分别处理声明与赋值
这种方式直接对应你想要的DECLARE_BOOL(var)写法,同时搭配一个用于生成赋值语句的宏:
1. 定义宏
// 用于在类内声明变量和对应的prev变量 #define DECLARE_BOOL(var) \ bool var; \ bool prev_##var; // 用于在remember_stuff函数内生成赋值语句 #define UPDATE_BOOL(var) \ prev_##var = var;
2. 类内使用
class YourClass { // 声明所有布尔变量 DECLARE_BOOL(var1) DECLARE_BOOL(var2) DECLARE_BOOL(var3) public: void remember_stuff() { // 生成所有赋值操作 UPDATE_BOOL(var1) UPDATE_BOOL(var2) UPDATE_BOOL(var3) } };
方式二:列表式宏(更易维护)
如果变量数量很多,维护两个宏调用列表容易出错,可以用一个变量列表宏统一管理,自动生成声明和赋值代码:
1. 定义宏
// 定义所有布尔变量的列表,VAR是一个占位宏,后续会被替换 #define BOOL_VARIABLES(VAR) \ VAR(var1) \ VAR(var2) \ VAR(var3) // 用于生成变量声明的宏 #define DECLARE_BOOL(var) bool var; bool prev_##var; // 用于生成赋值语句的宏 #define UPDATE_BOOL(var) prev_##var = var;
2. 类内使用
class YourClass { // 展开变量声明 BOOL_VARIABLES(DECLARE_BOOL) public: void remember_stuff() { // 展开赋值语句 BOOL_VARIABLES(UPDATE_BOOL) } };
这种方式下,你只需要在BOOL_VARIABLES里添加或删除变量,就能自动同步声明和赋值代码,避免重复修改两处的麻烦。
内容的提问来源于stack exchange,提问作者James Strieter
相关产品推荐
相关产品推荐

