Tôi có câu hỏi về mã mà tôi vừa mới nắm trong tay. Tôi chỉ muốn biết nếu trong C++ mẫu mô hình đó là đúng hay hữu ích để làm thừa kế sau (chỉ cần 3 lớp là một ví dụ):Thừa kế từ một mẫu C++
template< class I, class P, class D, unsigned int ID = 0 >
class PathFilter : public Filter< I, P, 1 >
{
...
}
template< class I, class A, unsigned int N = 1 >
class Filter : public Algorithm< I, A >
{
...
}
template< class I, class A >
class Algorithm : public A //This line
{
...
}
Câu hỏi của tôi đặc biệt về thừa kế trong ví dụ thứ ba. Nó có hữu ích để làm cho nó 'chung' và không chính xác? Đó là một lựa chọn tốt để thỏa hiệp mã dễ hiểu bằng một mã chung hơn? Tôi yêu cầu trước hết bởi vì tôi không phải là một chuyên gia trong các mẫu C++, nhưng cũng bởi vì tôi thấy mã này khó hiểu bằng cách sử dụng các mẫu (thường là tên của các mẫu không nói gì về nội dung của nó). Lời khuyên nào?
Vì vậy, nếu đó là những gì bạn muốn, tốt. Để dễ đọc, đúng, có một truyền thống đặt tên cho các tham số mẫu một cách kỳ lạ - I, P, A, v.v. Nhưng bạn không phải :). Cung cấp cho họ tên tốt hơn và họ có thể trở nên tự mô tả. –
Cảm ơn câu trả lời của bạn, nhưng tôi vẫn có một câu hỏi. Tôi hiểu việc sử dụng định nghĩa chung và trừu tượng của một số chức năng trong một lớp "cao hơn". Nhưng mục tiêu chính của một mẫu không phải là để khái quát hóa các kiểu tham số? Vì vậy, những gì tôi nói cuối cùng là tôi có thể vượt qua hầu như tất cả mọi thứ để lớp này cao hơn và bảo tồn một chức năng phân cấp thấp hơn. Cuối cùng, tôi sẽ có một tập hợp các đối tượng rất hạn chế có thể kế thừa (có thể một) các hàm thấp hơn, tôi có sai không? Nó không phải là một cách không thực tế để xác định rằng genericity? –
Bạn nói đúng.Chắc chắn chỉ là một tập hợp các lớp cụ thể 'A' phù hợp trong' Algorithm 'cuối cùng cho phép biên dịch (những' A' phải bằng cách nào đó thực hiện một giao diện được chỉ định bởi 'Thuật toán <>'). Bây giờ bạn đang sử dụng mẫu cho mục đích thiết kế. Những gì bạn muốn làm là viết 'Algorithm <>' một lần, và có một số thuật toán (ví dụ: 'Algorithm', 'Algorithm ', ...) chỉ viết những đoạn mã nhỏ hơn (tức là các lớp 'RungeKutta',' Symplectic' ...). Bằng cách nào đó bạn vẫn chung chung về loại này. –
Acorbe