【发布时间】:2016-03-02 02:30:09
【问题描述】:
如何使用 C 预处理自动生成以下代码模式(访问器)?
// Immutable accessor.
const auto& member1 () const {
return _member1; // private class member
}
// Mutable accessor.
auto& member1() {
return _member1; // private class member
}
我尝试了以下方法,但没有成功...
#define EXPAND_ACCESSOR(item) constexpr const auto& ##item() const { return _##item; } \
constexpr auto& ##item() { return _##item; }
EXPAND_ACCESSOR(member1) // didn't work
【问题讨论】:
-
您需要在每一行的末尾使用 \(后面没有空格)。
-
我做到了。编译器抱怨错误:粘贴“&”和“member1”没有给出有效的预处理标记#define EXPAND_ACCESSOR(item) constexpr const auto& ##item() const { return _##item; }\
-
#define 不适用于空格,除非在字符串内部,这就是使用 DEFINE _CONSTNAT 等的原因。使用 typedef 将最后一个单词替换为之前的所有内容,包括多行。以 ; 结尾
标签: c c-preprocessor