如何从内部枚举获取外部类名

时间:2015-09-11 14:48:19

标签: c++ templates nested-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;
}

1 个答案:

答案 0 :(得分:4)

您可以为此创建特征并手动输入它:

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);
}