首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++11多边形填充

C++11多边形填充
EN

Stack Overflow用户
提问于 2012-05-21 16:30:56
回答 2查看 1.4K关注 0票数 3

我正在开始一个新的项目,目标是MSVCGCC (latest)GCC 4.3 ARM和更多。我们构建的waf构建系统具有编译器的C++11功能检测。

我现在有了针对C++11的编译器中的所有功能的预处理器宏,例如#ifdef WAF_FEATURE_CXX_STRONGLY_TYPED_ENUMS。因此,我可以根据编译器支持的内容编译不同的代码。因为GCC几乎支持所有的功能,所以MSVC甚至还不够接近(即使是在MSVC 11中)

这让我想到了web开发polyfills -如果特性不可用,就用可用的特性集来实现它。

这远不像C++11那样简单,但是如果编译器不支持的话,有没有什么东西可以简单地用C++03实现呢?

归根结底,我希望在公共MyClass::MyEnumerator::EnumValue中使用强类型枚举器,但作用域API看起来更像C++03中的MyClass::EnumValue。有没有什么方法我可以很容易地在C++03中得到同样的结果:

代码语言:javascript
复制
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 :(
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-21 23:02:47

这就是你需要做的(我做了其他关于指针和非指针访问的简单修复)。简单地说,这就是@demi所说的。我必须创建一个虚拟的枚举名称。这在g++-4.7中有效。

代码语言:javascript
复制
class MyClass {
    public:
#if __cplusplus > 201000
        enum class MyEnumerator : unsigned int {
             EnumValue = 0
        };
    void method(MyEnumerator e) {}
#else
        class MyEnumerator {
        public:
          enum Dummy {
             EnumValue = 0
          };
        };
    void method(MyEnumerator::Dummy e) {}
#endif
};

int main() {
    MyClass mc;
    mc.method(MyClass::MyEnumerator::EnumValue); // C++11 or C++03
}
票数 4
EN

Stack Overflow用户

发布于 2012-05-21 16:45:26

您可以将enum class模拟为类。您的样板代码只是在定义上,但对于C++11和C++03的用法是相同的,并且可以使用模板/宏来完成。Look answer here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10681833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档