【问题标题】:Macro for generalized lambda capture用于广义 lambda 捕获的宏
【发布时间】:2014-08-28 15:59:15
【问题描述】:

我想使用 C++14 中引入的通用 lambda 捕获(请参阅 Move capture in lambda 以获得解释)。但是,我的代码的其余部分是 C++11 友好的。我想做一些类似的事情

#ifdef CPP14
// move capture in lambda
#else
// capture by-value
#endif

但是,没有很好的交叉编译器标志来推断版本。有什么人可以建议的吗? (当然,除了定义我自己的宏)

【问题讨论】:

标签: c++ c++11 lambda c++14


【解决方案1】:

其实 T.C.是的,C++11 FDIS 在"16.8 Predefined macro names [cpp.predefined]" 中说

名称 __cplusplus 在编译 C++ 翻译单元时定义为值 201103L

脚注指出:

旨在此标准的未来版本将用更大的值替换此宏的值。不符合标准的编译器应使用最多五个十进制数字的值。

所以使用以下代码对我来说似乎完全合法。

#if __cplusplus > 201103L
//c++1y or above
#else
//c++11 or below
#endif

但是,某些编译器可能不遵循标准,您可能想检查 _cplusplus 值是否已针对 c++1y 递增。

例如,GCC 在 4.7.0 版本之前将此标志设置为 1。

如果您需要有关_cplusplus 标志的更多信息,请查看this question

【讨论】:

    猜你喜欢
    • 2014-09-09
    • 2020-11-07
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 2015-11-02
    相关资源
    最近更新 更多