Как создать шаблон класса в этом случае?

У меня есть эти классы:

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 ответ

Как это:

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

который, учитывая ваши определения A, B, вы можете использовать как

FromAll<A, B> all{nullptr};
Другие вопросы по тегам