是否可以从变量中获取实例化模板的类型?
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/