【发布时间】:2012-05-21 08:30:55
【问题描述】:
我正在开始一个新项目,目标是MSVC、GCC (latest)、GCC 4.3 ARM 等等。我们搭建的waf构建系统有C++11编译器的特征检测。
我现在在编译器中为C++11 的所有功能提供了预处理器宏,例如#ifdef WAF_FEATURE_CXX_STRONGLY_TYPED_ENUMS。因此,我可以针对编译器支持的内容编译不同的代码。由于GCC 几乎支持它,所以MSVC 甚至都没有接近(即使MSVC 11)
这让我想到了 Web 开发 polyfill - 如果该功能不可用,请使用可用的功能集实现它。
这绝不是像 C++11 那样简单的 web 开发 polyfills,但是如果编译器不支持它,我可以用 C++03 简单地实现什么吗?
这归结为我想在我的公共 API 中使用强类型枚举器,但MyClass::MyEnumerator::EnumValue 的作用域看起来更像C++03 中的MyClass::EnumValue。无论如何我可以很容易地在C++03 中发生同样的事情:
class MyClass {
public:
#ifdef WAF_FEATURE_CXX_STRONGLY_TYPED_ENUMS
enum class MyEnumerator : unsigned int {
#else
enum MyEnumerator {
#endif
EnumValue = 0
}
void method(MyEnumerator e);
}
MyClass mc = new MyClass();
mc.method(MyClass::MyEnumerator::EnumValue) // C++11
mc.method(MyClass::EnumValue) // C++03 :(
【问题讨论】:
标签: c++ c++11 feature-detection waf