TLM头文件中宏语句`type Get ## name(...)`的解析疑问
关于TLM头文件中Getter宏定义的作用与展开解析
语句核心作用
type Get ## name (void) const { return name ; } 是预处理器宏的组成部分,用来自动生成类成员变量的只读访问函数(Getter),核心目的是减少重复编写Getter/Setter的冗余代码:
type:指定函数返回值的类型(与目标成员变量类型一致)Get ## name:通过预处理器的**Token粘贴(字符串拼接)**功能,把Get前缀和传入的name参数合并,生成Getter函数名const修饰:标记该函数为只读成员函数,保证不会修改类的成员变量- 函数体直接返回与参数
name同名的类成员变量
具体展开过程
结合你给出的宏调用示例逐一说明:
示例1:CHIATTR_PROP_GETSET_GEN(ReturnNID_StashNID, uint16_t)
预处理器会将宏内的占位符逐一替换为传入的参数:
type替换为uint16_tname替换为ReturnNID_StashNIDGet ## name通过拼接生成GetReturnNID_StashNID
最终展开后的代码为:
uint16_t GetReturnNID_StashNID(void) const { return ReturnNID_StashNID; }
示例2:CHIATTR_PROP_GETSET_GEN_FUNC_NAME(ReturnNID, ReturnNID_StashNID, uint16_t)
这个宏支持函数名与成员变量名分离,展开逻辑如下:
type替换为uint16_tfunc_name替换为ReturnNID,因此Get ## func_name拼接为GetReturnNIDprop_name替换为ReturnNID_StashNID(实际要访问的类成员变量)
展开后的代码为:
uint16_t GetReturnNID(void) const { return ReturnNID_StashNID; }
内容的提问来源于stack exchange,提问作者celia
相关产品推荐
相关产品推荐

