【发布时间】:2012-07-26 07:21:39
【问题描述】:
-
这样做[二进制]安全吗?
struct Foo { #if __cplusplus > 199711L Foo( std::initializer_list<int> & list ) { /* ... */ } #endif };我见过this topic, 但是没有回答 OP 原始问题。
有没有更好的方法来实现这种行为?
【问题讨论】:
-
“二进制安全”是什么意思?您当然必须使用完全相同的宏定义编译所有代码。
-
@KerrekSB 使用 -std=c++11 编译的库,仅在条件内联成员函数中使用 c++11 功能,如果用户未使用 - 编译其应用程序,则该库将不起作用 - std=c++11 ?
-
就语言标准而言,它肯定是不正确的。这是关于该主题的related question of mine。
-
就语言标准而言,我认为它的格式不正确,因为语言标准根本没有解决它。如果标头的内容仅根据
__cplusplus而改变,那么就标准而言,标头的内容根本不会改变,因为__cplusplus的值不会改变。与其他语言(包括早期版本的 C++)的互操作性超出了标准的范围。
标签: c++ oop c++11 c-preprocessor