c++ - 获取继承实例化模板的类型

标签 c++ templates

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

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/

相关文章:

c++ - 基于枚举的模板是个好主意吗?

c++ - 矩阵处理程序大序列

c++ - 如何在 .h 文件中定义函数体?

c++ - 如果 lambda 中带有 static_assert 的 constexpr,哪个编译器是正确的?

c++ - 使用模板 C++ 动态设置结构

c++ - Variadic 模板参数总是必须放在最后吗?

性能的 C++ 模板?

c++ - 如何在 C++ 中停止 Thrift TNonblockingServer?

c++ - 重复排列的排名和取消排名

c++ - 如何只设置一个存在的成员?