是否可以从变量中获取实例化模板的类型?

struct A { enum E {A_, B, C}; };
struct B { enum E {X, Y, Z}; };

class BaseClass {};
template <typename T> class TemplateClass : public BaseClass {};

class AChild : public TemplateClass<A> {};
class BChild : public TemplateClass<B> {};

template <typename T>
class WorkerClass
{
  static void do_stuff(const BaseClass& a) {}
};

int main(void)
{
  AChild a;
  //need to call WorkerClass<A::E>::do_stuff(a)
}

最佳答案

您可以这样做:

template <typename T>
void foo(TemplateClass<T>& c)
{
    WorkerClass<typename T::E>::do(c)
}


接着

foo(a);


其他传统方式是在模板类中添加类型:

template <typename T> class TemplateClass : public BaseClass
{
    using type = T;
};


所以你可以做

WorkerClass<AChild::type::E>::do(a);

关于c++ - 获取继承的实例化模板的类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48326560/

10-10 10:02