Bạn có thể làm điều đó trong C++ hiện tại. Bạn cung cấp cho mẫu số tham số "đủ lớn" và bạn cung cấp cho chúng mặc định:
class nothing1 {};
class nothing2 {};
class nothing3 {};
template <class T1 = nothing1, class T2 = nothing2, class T3 = nothing3>
class X : public T1, public T2, public T3 {};
Hoặc bạn có thể tinh vi hơn và sử dụng đệ quy. Trước tiên, bạn hướng tới tương lai tuyên bố mẫu:
class nothing {};
template <class T1 = nothing, class T2 = nothing, class T3 = nothing>
class X;
Sau đó, bạn chuyên cho trường hợp tất cả các thông số mặc định:
template <>
class X<nothing, nothing, nothing> {};
Sau đó, bạn đúng cách xác định các mẫu chung (mà trước đó bạn đã chỉ về phía trước -declared):
template <class T1, class T2, class T3>
class X : public T1, public X<T2, T3>
Lưu ý cách thức trong lớp cơ sở, bạn kế thừa X nhưng bạn bỏ lỡ tham số đầu tiên. Vì vậy, tất cả chúng đều trượt dọc theo một nơi. Cuối cùng tất cả chúng sẽ được mặc định, và chuyên môn sẽ bắt đầu, mà không kế thừa bất cứ điều gì, do đó chấm dứt đệ quy.
Cập nhật: vừa có một cảm giác kỳ lạ Tôi đã đăng tải một cái gì đó như thế này trước đây, and guess what...
bạn cũng có thể sử dụng chỉ là một lớp "không có gì" – sellibitze
@sellibitze - Tôi sử dụng sử dụng chỉ là một "không có gì" lớp trong phiên bản đệ quy. Bạn không thể sử dụng cùng một lớp cho các giá trị mặc định trong phiên bản không đệ quy, vì bạn sẽ nhận được các lỗi "không có gì đã là một lớp cơ sở trực tiếp". –
Tôi không hiểu: tại sao bạn bỏ qua tham số đầu tiên khi kế thừa từ X? – Gili