如何从内部枚举中获取外部 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);
}