c++ 如何理解#define GET(name,type)类型Get ## [duplicate]

7rfyedvj  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(141)
    • 此问题在此处已有答案**:

What does ## (double hash) do in a preprocessor directive?(2个答案)
4天前关闭。
在阅读. h文件中关于tlm的代码时,出现了一些令我困惑的事情:

//
// Generators for Setters and Getters.
//
#define CHIATTR_PROP_GETSET_GEN(name, type)         \
    type Get ## name (void) const { return name ; } \
    void Set ## name (type new_v) { name = new_v; }

#define CHIATTR_PROP_GETSET_GEN_FUNC_NAME(func_name, prop_name, type)   \
    type Get ## func_name (void) const { return prop_name ; }   \
    void Set ## func_name (type new_v) { prop_name = new_v; }

它的用法是这样的:

CHIATTR_PROP_GETSET_GEN(ReturnNID_StashNID, uint16_t)
CHIATTR_PROP_GETSET_GEN_FUNC_NAME(ReturnNID,
                          ReturnNID_StashNID,
                          uint16_t)

这个句子里发生了什么?

type Get ## name (void) const { return name ; } \

急切地等待着答案!

eeq64g8w

eeq64g8w1#

操作符取两个单独的标记,并将它们粘贴在一起以形成单个标记。

从您的示例中:

CHIATTR_PROP_GETSET_GEN(ReturnNID_StashNID, uint16_t)

将在预处理器步骤中替换为以下代码:

uint16_t GetReturnNID_StashNID (void) const { return ReturnNID_StashNID; }
void SetReturnNID_StashNID (uint16_t new_v) { ReturnNID_StashNID = new_v; }

相关问题