C++03中如何访问嵌套模板类内的枚举值?
C++03下访问模板类嵌套枚举的问题解决
问题原因
你当前代码使用了C++11及以后才支持的枚举成员访问语法(枚举类型::枚举值),但C++03标准中,嵌套在类中的枚举值直接属于类的作用域,不能通过枚举类型名作为中间作用域来访问,这就是编译报错的核心原因。
修正后的代码
#include <cstdio> namespace ns { template <typename T> class myclass { public: enum etype { e_option1, e_option2, e_option3, e_option4 }; }; } int main() { typedef typename ns::myclass<int> mc_t; mc_t::etype et = mc_t::e_option2; // 直接通过类作用域访问枚举值 switch(et) { case mc_t::e_option1 : printf("option1\n"); break; case mc_t::e_option2 : printf("option2\n"); break; case mc_t::e_option3 : printf("option3\n"); break; case mc_t::e_option4 : printf("option4\n"); break; } return 0; }
关键修改点
- 初始化枚举变量时:将
mc_t::etype::e_option2改为mc_t::e_option2 - switch分支中的case标签:将所有
mc_t::etype::e_optionX改为mc_t::e_optionX
在C03标准中,枚举类型的成员直接归属于包含它的类(或命名空间)作用域,因此不需要通过枚举类型名来限定访问。这种写法同时兼容C03和后续标准,符合你需要兼容旧代码库的要求。
内容的提问来源于stack exchange,提问作者Penny Dreudter
相关产品推荐
相关产品推荐

