Rất thường trong định nghĩa lớp C++, đặc biệt là trong các thư viện, lớp học đặc điểm vv, bạn xem mã tương tự như đoạn sau đây:Tại sao các tham số mẫu tên tệp không được nhận dạng ngầm là các loại?
template <typename Bar, typename Baz>
class Foo {
using bar_type = Bar;
using baz_type = Baz;
// ... etc.
}
Và chỉ với những dòng này bạn có thể tham khảo sau Foo<A,B>::bar_type
hoặc Foo<C,D>:baz_type
. Tôi tự hỏi: Tại sao tiêu chuẩn ngôn ngữ yêu cầu trình biên dịch tự động xác định các loại bằng cách sử dụng các thông số mẫu tên, tức là cho phép xóa hai dòng bằng cách sử dụng, và nhận ra Foo<A,B>::Bar
là A
và Foo<C,D>::Baz
là D
?
Điều này thậm chí không nên phá vỡ mã hiện tại, vì trong Foo, các mã định danh Bar và Baz cũng đã được lấy.
Vì chúng có thể không phải là loại. Ví dụ, chúng có thể là một giá trị, ví dụ, N trong 'template struct array' –
davidbak
Chúng không phải lúc nào cũng cần thiết, và phơi bày chúng có nghĩa là mã máy khách có thể được ghép nối với chúng (giả sử bạn có nghĩa là những bí danh đó là công khai.) – juanchopanza
Câu trả lời khác: Bởi vì nó tầm thường để tự làm. Đó là câu trả lời được đưa ra khi ai đó hỏi tại sao không có một từ khóa 'super' trong C++ (nhưng tôi không có tham chiếu đến điều đó trong tầm tay). – davidbak