Как создать шаблон класса в этом случае?
У меня есть эти классы:
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};