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

标签 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;
}

最佳答案

您可以为此创建特征并手动喂养它:

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

关于c++ - 如何从内部枚举中获取外部类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32526261/

相关文章:

c++ - 错误 - : 'QObject::QObject' : cannot access private member declared in class 'QObject'

c++ - 组合多个类模板特化

C++ 模板<运算符>

java - 在 Java 中什么是嵌套类,它们有什么作用?

c# - 顶级通用类库的 Class.Class vs Namespace.Class?

android - TabActivity 使用的 BadTokenException ActivityGroup

c++ - 如何在同一进程中执行命令

c++ - 编译器无法对用作条件的表达式应用显式转换

c++ - 结构的内存分配问题

c++ - 为什么非类型模板参数表达式处理在编译器之间不一致?