我正在开始一个新项目,该项目将针对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——如果该功能不可用,则使用可用的功能集实现它。
这不像 web 开发 polyfill 那样简单,C++11
但是如果编译器不支持它,我可以用 C++03 简单地实现什么吗?
这归结为这样一个事实,即我想在我的公共 API 中使用强类型枚举器,但作用域看起来MyClass::MyEnumerator::EnumValue
更像MyClass::EnumValue
. C++03
无论如何我可以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 :(