更或者少就是标题所说的。虽然我还没有使用C++0x,但我希望为它到来做好准备,并且我也想减少我需要重写来使用一些新功能的代码量。这样我就可以一次性实现向前和向后兼容。
我发现最有趣的之一是
在检查了“官方解决方法”和Meyer的建议之后,我决定要在我的C++和未来的C++0x程序中都使用它。第二部分很简单——作为关键字,
Meyers提案的功能如下:
该提议的问题在于它声明了类型必须被声明为C++0x所需的
我想以一种舒适且合法的方式在C++程序中使用
作为补充,尝试将一些C++0x的有用特性移植到C++以提高兼容性和编码是否受欢迎或不被赞同?同时,我已经将此解决方案和其他正在开发中的解决方案集成在即将发布的软件中。
我发现最有趣的之一是
nullptr
,最近我已经经常在使用它了。在检查了“官方解决方法”和Meyer的建议之后,我决定要在我的C++和未来的C++0x程序中都使用它。第二部分很简单——作为关键字,
nullptr
将被支持。但第一部分让我感到有些不舒服。Meyers提案的功能如下:
class nullptr_t { // ← this is my issue
// definition of nullptr_t
} nullptr = { };
该提议的问题在于它声明了类型必须被声明为C++0x所需的
std::nullptr_t
。这意味着为了让解决方法“感觉本地”,必须通过重新打开std::
命名空间来添加类型。我理解在C++程序中这是非法的(与添加特化不同,后者显然是不受欢迎但可以放行并带有警告)。我想以一种舒适且合法的方式在C++程序中使用
nullptr
。我曾考虑过在另一个命名空间中声明该类型,然后使用using
将其引入:namespace mylibrary {
class nullptr_t {
....
} nullptr = { };
// end namespace
}
// These would have to go in the header file.
using mylibrary::nullptr;
using mylibrary::nullptr_t; // apparently this is necessary as well?
这样做是正确的吗?它会强制使用using
指令,这也强制了特定顺序的#include
指令。我是否可以期望没有任何早于C++0x的代码会请求带有命名空间的nullptr_t
类型(例如作为函数参数类型)?如果这样做,它是否会“感觉本地化”?
作为补充,尝试将一些C++0x的有用特性移植到C++以提高兼容性和编码是否受欢迎或不被赞同?同时,我已经将此解决方案和其他正在开发中的解决方案集成在即将发布的软件中。
nullptr_t
来完成无法通过简单传递nullptr
或指针类型来完成的任何事情。 - Luis Machuca