我有这些课程:
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);
谢谢,
微米。
答案 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};