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

时间:2015-02-02 06:59:44

标签: c++

最近,我在工作期间收到了一些全新的代码,我对这些代码是如何运作感到困惑。在搜索之后,我发现了一些信息,我来到这里寻求帮助。

所以这里是代码:

#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; \  
    }

这是什么意思?

1 个答案:

答案 0 :(得分:2)

#define之后,只要DCL_PROP( prop )出现在一个类中,宏中列出的测试将被注入到C ++代码中,添加一个名为private的私有数据成员为“prop”提供,具有公共set_道具和get_道具功能。例如:

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