Możesz to zrobić w bieżącym C++. Dajesz szablonowi „wystarczająco” dużą liczbę parametrów, i dać im domyślne:
class nothing1 {};
class nothing2 {};
class nothing3 {};
template <class T1 = nothing1, class T2 = nothing2, class T3 = nothing3>
class X : public T1, public T2, public T3 {};
Albo można uzyskać bardziej wyrafinowane i użyć rekursji. Najpierw do przodu zadeklarować szablonu:
class nothing {};
template <class T1 = nothing, class T2 = nothing, class T3 = nothing>
class X;
Następnie Specjalizujemy się w przypadku, gdy wszystkie parametry są domyślnie:
template <>
class X<nothing, nothing, nothing> {};
Wtedy właściwie określić ogólny szablon (który wcześniej masz tylko do przodu -deklarowane):
template <class T1, class T2, class T3>
class X : public T1, public X<T2, T3>
Zauważ, jak w klasie bazowej dziedziczysz X, ale tęsknisz za pierwszym parametrem. Więc wszyscy przesuwają się wzdłuż jednego miejsca. W końcu wszystkie będą wartościami domyślnymi, a specjalizacja zostanie uruchomiona, co niczego nie odziedziczy, tym samym kończąc rekursję.
Aktualizacja: właśnie miałem dziwne uczucie, bym pisał coś tak przed, and guess what...
można też użyć tylko jednego „nic” class – sellibitze
@sellibitze - używam korzystanie tylko jeden „nic” klasa w wersja rekursywna. Nie możesz użyć tej samej klasy dla wartości domyślnych w wersji nierekurencyjnej, ponieważ dostaniesz błędy "nic już nie jest klasą bezpośrednią". –
Nie rozumiem: dlaczego pomijasz pierwszy parametr podczas dziedziczenia z X? – Gili