像 #define DCL_PROP(prop)这样的宏是如何工作的

How does a macro like #define DCL_PROP(prop) work?

本文关键字:工作 何工作 DCL #define PROP prop      更新时间:2023-10-16

最近,我在工作中得到了一些全新的代码,我对这些代码是如何工作的感到困惑。经过搜索,只找到很少的信息,我来到这里寻求帮助。

所以这是代码:

#define DCL_PROP(prop)   
private:   
    std::string prop;   
public:   
    User& set_##prop(const std::string& prop)   
    {   
        this->prop = prop;   
        return *this;   
    }   
    const std::string& get_##prop()   
    {   
        return prop;   
    }

什么意思?

之后#define,无论DCL_PROP( prop )出现在类中的哪个位置,宏中列出的测试都会被注入到C++代码中,添加一个私有数据成员,称为您为 "prop" 提供的任何内容,具有公共set_ prop 和 get_ prop 函数。 例如:

class X
{
    DCL_PROP(name);
};

将生成如下代码:

class X
{
private:
    std::string prop;
public:
    User& set_name(const std::string& prop)
    {
        this->prop = prop;
        return *this;
    }
    const std::string& get_name()
    {
        return prop;
    }
};

。除了它都将在生成的代码中的一行上,这与功能无关。

通常,您可以使用编译开关来观察这些类型的替换,例如:g++ -E somefile.cccl.exe /E somefile.cpp