C++ 获取[enum成员?]的封闭类型 struct类1 { 枚举资源 { a=9, b=15 }; 类别1(rese){} }; 结构类2 { 枚举资源 { 他=5, de=2 }; 类别2(rese){} }; 模板 无效fn(E) { foo(T(e)); }
这个函数可以工作,我可以像C++ 获取[enum成员?]的封闭类型 struct类1 { 枚举资源 { a=9, b=15 }; 类别1(rese){} }; 结构类2 { 枚举资源 { 他=5, de=2 }; 类别2(rese){} }; 模板 无效fn(E) { foo(T(e)); },c++,C++,这个函数可以工作,我可以像fn(class2::he)那样调用它,但我不想显式地指定class2两次 有没有一种方法可以根据class2::he推断出类型“class2”?如何定义一些帮助器元函数以获得所需的类型 struct class1 { enum res { a = 9, b = 15 }; class1(res e) { } }; struct class2 { enum res { h
fn(class2::he)那样调用它例如code>,但我不想显式地指定class2
两次
有没有一种方法可以根据class2::he
推断出类型“class2”?如何定义一些帮助器元函数以获得所需的类型
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));
}
#包括
结构类别1
{
枚举资源
{
a=9,
b=15
};
类别1(rese){}
};
结构类2
{
枚举资源
{
他=5,
de=2
};
类别2(rese){}
};
自动获取封闭类型(class1::res)->class1;
自动获取封闭类型(class2::res)->class2;
模板
使用get_enclosuring_type_t=decltype(get_enclosuring_type(std::declval());
模板
无效fn(E常数E)
{
使用类型=获取封闭类型;
foo(类型{e});
}
我现在不知道是否存在这样的方法,但至少有一点麻烦:您可以使用static constexpr
consts和类似using base=/*class1或class2*/的类替换枚举代码>内部。您如何区分类C1{enum E1{};类C2{使用E2=C1::E1}
from类C2{enum E2{};类C1{使用E1=C2::E2}
?C++在类型和名称之间有细微的区别。特别是,一种类型可能有多个(嵌套)名称。模板中的类型推断为您提供了一个类型以及该类型的另一个名称。(此处typename T
)
#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});
}