代码之家  ›  专栏  ›  技术社区  ›  zapredelom

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

  •  1
  • zapredelom  · 技术社区  · 11 年前

    基本上,我想做的是用代码编写的。那么,有没有一种方法可以使用模板或其他方法在全局函数中获取外部类名?有办法让这段代码发挥作用吗?

    #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 回复  |  直到 11 年前
        1
  •  4
  •   Jarod42    11 年前

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

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