作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
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});
}
关于c++ - 获取 [枚举成员?] 的封闭类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37689877/
我是一名优秀的程序员,十分优秀!