C预处理令牌串联

是的

如何使用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
萨胡

您可以使用宏来完成您要尝试的操作。您的宏需要一些调整。(我使用三行内容来回答问题)

你有:

#define EXPAND_ACCESSOR(item) \
   constexpr const auto& ##item() const { return _##item; } \
   constexpr auto& ##item() { return _##item; }

宏问题:

   constexpr const auto& ##item() const { return _##item; } \
                         ^^ Not appropriate.

我从g ++收到以下错误:

error: pasting "&" and "member1" does not give a valid preprocessing token

您只需要使用:

#define EXPAND_ACCESSOR(item) \
   constexpr const auto& item() const { return _##item; } \
   constexpr auto& item() { return _##item; }

这样可以解决预处理器错误,但会导致与返回类型相关的错误。当您使用auto返回类型时,您将需要使用尾随返回类型。

将其constexpr与非const成员函数一起使用是不合适的。当成员函数用限定时constexpr,将其假定为const成员函数。因此,您需要constexpr从该功能中删除

这是一个应该起作用的固定宏:

#define EXPAND_ACCESSOR(item) \
   constexpr const decltype( _ ## item) & item() const { return _ ## item; } \
   decltype( _ ## item) & item() { return _ ## item; }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

#define之外的C预处理程序串联

来自分类Dev

for循环中的C预处理程序串联

来自分类Dev

C ++预处理程序串联操作

来自分类Dev

C预处理程序宏扩展串联

来自分类Dev

C预处理程序宏扩展串联

来自分类Dev

Thymeleaf 串联预处理:

来自分类Dev

C lexer,了解文档,预处理令牌

来自分类Dev

与C ++模板进行预处理器样式的串联?

来自分类Dev

与C ++模板进行预处理器样式的串联?

来自分类Dev

为什么MSVC预处理器与GCC和Clang的串联令牌不同?

来自分类Dev

C预处理器宏参数中的令牌检测

来自分类Dev

预处理令牌和空格

来自分类Dev

Stringify CMake预处理令牌

来自分类Dev

包含路径的预处理器串联

来自分类Dev

如何根据预定义的宏(C ++预处理器)编写有效令牌?

来自分类Dev

串联预处理器定义以形成字符串

来自分类Dev

C ++预处理器

来自分类Dev

C ++预处理器

来自分类Dev

C文件的部分预处理

来自分类Dev

令牌仅在预处理之后还是在预处理过程中进行计数?

来自分类Dev

C ++预处理器标准行为

来自分类Dev

C预处理程序指针混乱

来自分类Dev

间接预处理器替换C

来自分类Dev

C ++定义预处理器

来自分类Dev

C预处理程序是否在运行?

来自分类Dev

C递归预处理器定义

来自分类Dev

扩展单个C预处理程序指令

来自分类Dev

C预处理程序是否删除“&*”的实例?

来自分类Dev

C预处理程序:及早评估宏