最近,我在工作期间收到了一些全新的代码,我对这些代码是如何运作感到困惑。在搜索之后,我发现了一些信息,我来到这里寻求帮助。
所以这里是代码:
#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; \
}
这是什么意思?
答案 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.cc
或cl.exe /E somefile.cpp
。