C++ 动态迭代静态信息

C++ 动态迭代静态信息,c++,templates,specialization,C++,Templates,Specialization,假设我为每种枚举类型专门设置了一些类: enum MyEnum { EnumA = 0, EnumB, EnumSize }; template <enum MyEnum> class StaticEnumInfo { }; template <> class StaticEnumInfo<EnumA>{ typedef bool type; const std::string name = "EnumA"; }; template &

假设我为每种枚举类型专门设置了一些类:

enum MyEnum {
  EnumA = 0, EnumB, EnumSize
};

template <enum MyEnum> 
class StaticEnumInfo {

};

template <> 
class StaticEnumInfo<EnumA>{
  typedef bool type;
  const std::string name = "EnumA";
};

template <> 
class StaticEnumInfo<EnumB>{
  typedef int type;
  const std::string name = "EnumB";
};
enum MyEnum{
EnumA=0,EnumB,EnumSize
};
模板
类StaticEnumInfo{
};
模板
类StaticEnumInfo{
类型定义布尔类型;
const std::string name=“EnumA”;
};
模板
类StaticEnumInfo{
typedef int类型;
const std::string name=“EnumB”;
};
是否可以迭代所有名称并打印它们? 我想写一些像:

for(MyEnum i = EnumA; i < EnumSize; ++i){
    // Doesn't make sense, I know.
    std::cout << StaticEnumInfo<i>::name << std::endl;
}
for(MyEnum i=EnumA;i
template <typename T, T... S, typename F>
constexpr void for_sequence(std::integer_sequence<T, S...>, F&& f) {
    (static_cast<void>(f(std::integral_constant<T, S>{})), ...);
}
模板
_序列的constexpr void(std::integer_序列,F&&F){
(静态_-cast(f(std::积分_常数{})),…);
}
然后像这样使用它:

for_sequence(
    std::make_integer_sequence<int, EnumSize>{},
    [&](auto i) {
        constexpr auto index = static_cast<MyEnum>(int{i});
        std::cout << StaticEnumInfo<index>::name << std::endl;
    }
);
_序列的
(
std::make_integer_sequence{},
[&](自动i){
constexpr auto-index=static_cast(int{i});

STD::CUT C++还没有反映。如果你搜索如何迭代枚举,你会得到很多解决问题的方法。不,你不能把运行时数据转换成编译时常量。映射“函数”将是必需的,因此最好映射到名称。您确定的模板将允许一个constexpr循环迭代器,而不仅仅是(auto i:std::make_index_sequence{})的
模板吗
?需要为索引序列提供
get
,这就是我向您询问模板的原因present@MasterID我添加了扩展声明提案的链接