【发布时间】:2012-05-12 18:34:58
【问题描述】:
我想开始过渡到在大型跨平台代码库中使用 C++11。主要问题是所使用的编译器之间对 C++11 的支持程度不同。
除了在整个代码中乱扔宏指令外,是否有人对如何简化这种过渡有任何示例/建议?请提供特定功能的技术。例如:
// cpp11compat.h
// For compilers that do not have 'nullptr', we will define it as 'NULL'.
// Any misuses of 'nullptr' will be caught by C++11 compliant compilers.
// Obviously, this won't fix anything that depends on the type 'nullptr_t'
//
#ifdef STUPID_SUN_COMPILER
#define nullptr NULL
#endif
想法?
【问题讨论】:
-
现在您有几个选择,查看所有编译器并找出它们共享的 c++11 的哪些功能,然后只使用这些功能,或者您可以继续使用当前的宏方案,所有编译器都有宏,将给出它们的名称和版本号。这将是一个糟糕的标题,虽然很糟糕。祝你好运!
-
@johnathon - 是的,那太好了,除了一些编译器在 C++11 支持方面几乎没有。我在看着你 SunStudio...
-
真正要实现的是c++ 11还是新的。它仍然是一个婴儿,所以编译器支持将全面缺乏,当然 gcc 远远领先于其竞争对手,但即使是 IT 也无法支持所有 c++ 11。
-
如果你需要支持非常老的编译器,这可能只是浪费时间。
-
override和final也是关键字,可以很容易地替换为不支持这些的编译的定义。