Вы можете сделать это в текущем C++. Вы даете шаблону «достаточно большой» число параметров, и вы даете им по умолчанию:
class nothing1 {};
class nothing2 {};
class nothing3 {};
template <class T1 = nothing1, class T2 = nothing2, class T3 = nothing3>
class X : public T1, public T2, public T3 {};
Или вы можете получить более сложный и использовать рекурсию. Во-первых вы вперед объявить шаблон:
class nothing {};
template <class T1 = nothing, class T2 = nothing, class T3 = nothing>
class X;
Тогда вы специализируетесь для случая, когда все параметры по умолчанию:
template <>
class X<nothing, nothing, nothing> {};
Тогда вы правильно определить общий шаблон (который ранее вы только вперед -declared):
template <class T1, class T2, class T3>
class X : public T1, public X<T2, T3>
Обратите внимание, как в базовом классе вы наследуете X, но вы пропустите первый параметр. Поэтому все они скользят по одному месту. В конце концов все они будут по умолчанию, и специализация начнет работать, что не наследует ничего, таким образом заканчивая рекурсию.
Update: просто было странное ощущение, что я отвечал что-то подобное раньше, and guess what...
вы также можете использовать только один «ничего» класс – sellibitze
@sellibitze - я использую использовать только один «ничего» класс в рекурсивная версия. Вы не можете использовать один и тот же класс для значений по умолчанию в нерекурсивной версии, потому что вы получите ошибки «ничего уже не является прямым базовым классом». –
Я не понимаю: почему вы пропустили первый параметр при наследовании от X? – Gili