在这种情况下如何创建模板类?

时间:2014-05-08 19:23:00

标签: c++ templates

我有这些课程:

template<class T>
class A
{
public:
  A(void* obj) { }
};

template<class T>
class B
{
public:
  B(void* obj) { }
};

class FromA: public A<FromA>
{
public:
  FromA(void* obj)
    : A(obj)
  {
  }
};


class FromB: public B<FromB>
{
public:
  FromB(void* obj)
    : B(obj)
  {
  }
};

有了这个,我可以创建这样的对象:

FromA obja(0);
FromB objb(0);

问题是我必须创建FromA和FromB类。我想以某种方式用一般模板类替换它,例如:

template<typename T>
class FromGeneric: public T<FromGeneric<T>> 
{
public:
  FromGeneric(void* obj)
    : T(obj)
  {
  }
};

有了这样的课,我可以写:

FromGeneric<A> aGenObj(0);
FromGeneric<B> bGenObj(0);

谢谢,

微米。

1 个答案:

答案 0 :(得分:1)

就像那样:

template<template<typename...> class... C>
struct FromAll : C<FromAll<C...>>...
{
    template<typename A>
    FromAll(A&& a) : C<FromAll>(std::forward<A>(a))... {}
};

根据您对AB的定义,您可以使用

FromAll<A, B> all{nullptr};