获取 [枚举成员?] 的封闭类型
get the enclosing type of an [enum member?]
struct class1
{
enum res
{
a = 9,
b = 15
};
class1(res e) { }
};
struct class2
{
enum res
{
he = 5,
de = 2
};
class2(res e) {}
};
template<typename T, typename E>
void fn(E e)
{
foo(T(e));
}
这个函数有效,例如我可以像fn<class2>(class2::he));
一样调用它,但我不想显式指定class2
两次。
有没有办法根据class2::he
推断出类型"class2"?
定义一些辅助元函数来获取你想要的类型怎么样?
#include <type_traits>
struct class1
{
enum res
{
a = 9,
b = 15
};
class1(res e) { }
};
struct class2
{
enum res
{
he = 5,
de = 2
};
class2(res e) {}
};
auto get_enclosing_type(class1::res) -> class1;
auto get_enclosing_type(class2::res) -> class2;
template <typename T>
using get_enclosing_type_t = decltype(get_enclosing_type(std::declval<T>()));
template<typename E>
void fn(E const e)
{
using type = get_enclosing_type_t<E>;
foo(type {e});
}
相关文章:
- 枚举成员与静态 int 成员?
- 从类访问枚举成员
- 在有符号基础类型枚举的位域上溢出
- 在编译时将强类型枚举器转换为其基础类型?
- 枚举成员不是类型错误
- std::映射键作为模板化结构与枚举成员
- 设置类的枚举成员无效地使用"枚举"
- 如果 int 是"not within the enums range",为什么将 int 转换为强类型枚举会编译?
- 如何访问结构和枚举成员形成一类
- 类型枚举的变量不是类型名称
- 是否可以在 constexpr 函数中遍历枚举成员,因此值为 constexpr
- 获取 [枚举成员?] 的封闭类型
- 强类型枚举的语法实现错误
- 如何使用 SWIG 枚举枚举成员
- 通过int值访问枚举成员
- '='应初始化所有枚举成员或仅初始化第一个枚举成员;
- 为什么可以获取此枚举成员值,而不必先深入研究嵌套枚举
- 在成员函数的默认参数中使用强类型枚举的成员
- 怎样才能轻松地将枚举成员转换为int类型?
- 枚举成员类型仍然依赖于实现