C++ 03允許創建模板類,從模板參數遺產:如何包裝「擴展的可變參數模板參數」?
// c++03
struct NullType {};
template <class T0, class T1 = NullType, class T2 = NullType>
class Collector : public T0, public T1, public T2
{
};
template <class T0, class T1>
class Collector<T0, T1, NullType> : public T0, public T1
{
};
template <class T0>
class Collector<T0, NullType, NullType> : public T0
{
};
所以
typedef Collector<A, B, C> X;
eqeals到
class X: public A, public B, public C {};
C++ 11允許這樣做更容易:
// variadic templates - great thing!
template <class ... Classes>
class C11_Collector :
public Classes ...
{
};
之前的繼承
包裝收集器必須包裹模板參數:
template <template <class> class Wrap, class T0, class T1 = NullType, class T2 = NullType>
class Wrapping_Collector : public Wrap<T0>, public Wrap<T1>, public Wrap<T2>
{
};
template <template <class> class Wrap, class T0, class T1>
class Wrapping_Collector<Wrap, T0, T1, NullType> : public Wrap<T0>, public Wrap<T1>
{
};
template <template <class> class Wrap, class T0>
class Wrapping_Collector<Wrap, T0, NullType, NullType> : public Wrap<T0>
{
};
所以
typedef Wrapping_Collector<W, A, B> X;
eqeals到
class X: public W<A>, public W<B> {};
如何更easer方式由C++ 11實現Wrapping_Collector?
我不會理解爲什麼'Wrap'甚至是必要的。由於在C++ 03中缺少可變參數模板,是不是首先存在'NullType'? –