如何从内部枚举中获取外部 class 名称
how to get outer class name from inner enum
基本上我想做的是用代码写的。那么,有没有办法使用模板或其他方法在全局函数中获取外部 class 名称?有没有办法让这段代码工作?
#include <iostream>
class A
{
public:
enum class B
{
val1,
val2
};
typedef B InnerEnum;
static void f(InnerEnum val)
{
std::cout << static_cast<int>(val);
}
};
template <typename T1>
void f(typename T1::InnerEnum val)
{
T1::f(val);
}
int main()
{
A::InnerEnum v = A::InnerEnum::val1;
f(v);
return 0;
}
您可以为此创建特征并手动喂养它:
template <typename T>
struct outer_class;
template <>
struct outer_class<A::B> { using type = A;};
然后
template <typename E>
void f(E val)
{
using T = typename outer_class<E>::type;
T::f(val);
}
基本上我想做的是用代码写的。那么,有没有办法使用模板或其他方法在全局函数中获取外部 class 名称?有没有办法让这段代码工作?
#include <iostream>
class A
{
public:
enum class B
{
val1,
val2
};
typedef B InnerEnum;
static void f(InnerEnum val)
{
std::cout << static_cast<int>(val);
}
};
template <typename T1>
void f(typename T1::InnerEnum val)
{
T1::f(val);
}
int main()
{
A::InnerEnum v = A::InnerEnum::val1;
f(v);
return 0;
}
您可以为此创建特征并手动喂养它:
template <typename T>
struct outer_class;
template <>
struct outer_class<A::B> { using type = A;};
然后
template <typename E>
void f(E val)
{
using T = typename outer_class<E>::type;
T::f(val);
}