Tôi có một chuỗi kế thừa với Base là lớp cơ sở. Tôi muốn có thể viết một mẫu lớp mà thừa hưởng Base và có thể một lớp Base-derived khác. Tôi có thể sử dụng thừa kế ảo, nhưng tôi tìm thấy một giải pháp khác. Tôi muốn biết nếu thiết kế lớp phổ biến/đáng kể/hợp pháp:Thiết kế C++ OO: Thừa kế tham số mẫu
Viết mẫu lớp trong đó thông số mẫu là lớp bắt nguồn từ đó, tức là lớp phải là Lớp gốc hoặc Gốc. Trong hàm tạo, tôi có thể sử dụng khẳng định tĩnh để thực sự đảm bảo rằng người dùng không sử dụng bất kỳ lớp bất hợp pháp nào làm tham số mẫu.
Nếu nó hoạt động, tôi sẽ không bao giờ có vấn đề thừa kế ảo ... câu hỏi là, nó là ok để làm điều đó. Tôi chưa bao giờ thấy nó trong các dự án khác, vì vậy tôi muốn chắc chắn trước khi tôi sử dụng nó.
EDIT: Chỉ cần chắc chắn tôi không làm bạn bối rối, sau đây là một số mã:
class Base
{
};
class Derived : public Base
{
};
template <Class TheBase>
class MyDerived : public TheBase
{
};
Bây giờ tôi có thể sử dụng Base
hay bất kỳ lớp -derived Base
, ví dụ Derived
, như tham số TheBase
.
Bạn có thể cho chúng tôi thấy một số mã không? Tôi nghĩ rằng nó sẽ giúp đỡ để có được câu trả lời tốt hơn. –
Thành thật mà nói, có vẻ như bạn mô tả [Mẫu mẫu tò mò định kỳ (CRTP)] (http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern). – WhozCraig
"Tôi sẽ không bao giờ có vấn đề thừa kế ảo" ... Bạn đã bao giờ nghe nói về luật của Murphy chưa? :) –