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我添加了扩展声明提案的链接