Trong một số trường hợp, bạn tham khảo một thành viên được gọi là tùy thuộc vào loại (có nghĩa là "phụ thuộc vào thông số mẫu") trình biên dịch không thể luôn luôn suy luận rõ ràng ý nghĩa ngữ nghĩa của cấu trúc kết quả, bởi vì nó không biết tên đó là gì (nghĩa là nó là tên của một kiểu, tên của một thành viên dữ liệu hay tên của cái gì khác). Trong các trường hợp như vậy bạn phải phân biệt tình hình bằng cách nói rõ ràng trình biên dịch rằng tên thuộc về một tên tệp được định nghĩa là một thành viên của kiểu phụ thuộc đó.
Ví dụ
template <class T> struct S {
typename T::type i;
};
Trong ví dụ này các từ khóa typename
trong cần thiết cho việc mã để biên dịch.
Điều tương tự cũng xảy ra khi bạn muốn tham chiếu đến thành viên mẫu thuộc loại phụ thuộc, tức là tên chỉ định mẫu. Bạn cũng phải giúp trình biên dịch bằng cách sử dụng các từ khóa template
, mặc dù nó được đặt khác nhau
template <class T> struct S {
T::template ptr<int> p;
};
Trong một số trường hợp nó có thể là cần thiết để sử dụng cả hai
template <class T> struct S {
typename T::template ptr<int>::type i;
};
(nếu tôi nhận được cú pháp chính xác) .
Tất nhiên, một vai trò khác của từ khóa typename
sẽ được sử dụng trong khai báo tham số mẫu.
http://stackoverflow.com/questions/1600464/ – sbi