C++ 像#define DCL#u PROP(PROP)这样的宏是如何工作的?

C++ 像#define DCL#u PROP(PROP)这样的宏是如何工作的?,c++,C++,最近,我在工作中收到了一些全新的代码,我对这些代码是如何工作的感到困惑。经过搜索,只发现了很少的信息,我来到这里寻求帮助 下面是代码: #define DCL_PROP(prop) \ private: \ std::string prop; \ public: \ User& set_##prop(const std::string& prop) \ { \ this->prop = prop; \

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

下面是代码:

#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; \  
    }
<> P> > <代码> >定义< /代码>,无论代码> dCLSUP(< /代码> PROP>代码>)>代码>出现在一个类中,宏中列出的测试将被注入到C++代码中,添加一个称为“PROP”的任何私有数据成员,用公共<代码> SETI< <代码> PROP和<代码> GETY<<代码> 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-Foo.C.<代码>或<代码> C.exe/E.Foo.CPP 谷歌C++宏,学习哪一个部分你不理解?返回类型<代码>用户和<代码>的使用是好奇的;不清楚为什么只能在

类User
中使用这个类(当类名可以作为宏的参数提供时),但它允许作者为每个属性编写一行,并为属性生成setter和getter。(或者,换句话说,虽然我同意你所说的大部分内容,
classx
必须是
classuser
或者宏必须升级。)谢谢你的详细解释。但是我仍然有一个问题,像这样的宏的优缺点是什么?我没有仔细看。不过,它不仅可以用于
用户
,还可以用于从
用户
派生的任何类。。。也许这被认为是对预期用途的一个有用的健全性检查/限制。虽然有点俗气,但宏的许多用法都是如此。@Markowitz:优点是你可以更好地考虑代码的因素——写更少的行和更少的冗余。然后您可以更改宏并“修复”或调整它的所有用途。缺点是宏是邪恶的,因为各种原因,你会看到在C++ FAQ Lite(谷歌IT)中解释。