Puede hacerlo en C++ actual. Usted da la plantilla de un número "suficientemente grande" de los parámetros, y se les da por defecto:
class nothing1 {};
class nothing2 {};
class nothing3 {};
template <class T1 = nothing1, class T2 = nothing2, class T3 = nothing3>
class X : public T1, public T2, public T3 {};
O puede obtener más sofisticados y el uso de recursividad. En primer lugar, con visión de declarar la plantilla:
class nothing {};
template <class T1 = nothing, class T2 = nothing, class T3 = nothing>
class X;
Entonces usted se especializa en el caso en todos los parámetros por defecto son:
template <>
class X<nothing, nothing, nothing> {};
A continuación, defina adecuadamente la plantilla general (que previamente se haya solamente hacia adelante -declarado):
template <class T1, class T2, class T3>
class X : public T1, public X<T2, T3>
Observe que en la clase base, hereda X pero omite el primer parámetro. Entonces todos se deslizan a lo largo de un lugar. Eventualmente todos serán valores predeterminados, y la especialización se activará, lo que no heredará nada, por lo tanto, terminará la recursión.
Actualización: sólo tenía una sensación extraña que había publicado algo como esto antes, and guess what...
también se podría utilizar una sola clase "nada" – sellibitze
@sellibitze - utilizo uso una sola clase "nada" en el versión recursiva. No puede usar la misma clase para los valores predeterminados en la versión no recursiva, porque obtendrá errores de "nada es ya una clase base directa". –
No entiendo: ¿por qué se saltea el primer parámetro al heredar de X? – Gili