2013-06-05 37 views
20

Đây có phải là cần thiết:Có cần sử dụng các tham số mẫu để tham chiếu cùng một định nghĩa bên trong lớp không?

template <typename T> 
class A{ 
    T*point; 
    A<T> someFunction(){} //instead of returning just "A", not "A<T>" 
} 

sẽ someFunction ngầm trả lại A cùng loại như các lớp được xác định? Bởi vì bên ngoài lớp học, bạn chỉ có thể tham khảo loại này là A<float> hoặc tương tự, vì vậy tôi cho rằng điều này cũng cần thiết trong lớp học. Tôi phát hiện ra nó biên dịch mà không có <> vì vậy điều này làm cho tự hỏi nếu nó là một thói quen an toàn để bỏ qua các dấu ngoặc.

Trả lời

25

C++ hợp lệ và an toàn để bỏ qua các tham số mẫu bên trong định nghĩa lớp. Thực tế là thực hành tốt, vì bạn có thể thêm các tham số mẫu khác với các giá trị mặc định sau này. Bạn có thể quên thay đổi A<T> thành A<T,SomeOtherParameter> và nhận các lỗi biên dịch thời gian lạ. Sau đó, chỉ cần trở về A sẽ làm điều đó.

+1

+1 để cung cấp lý do hợp lý để tham gia thói quen này – johnbakers

18

Bạn có thể nói A<T> hoặc chỉ AA có nghĩa là giống như A<T>. Điều này là do 14.6.1/1:

Giống như các lớp bình thường (không phải mẫu), mẫu lớp có tên lớp được tiêm (Điều 9). Tên lớp được tiêm [...] tương đương với tên mẫu theo sau là mẫu tham số của mẫu lớp được đính kèm trong <>.

+2

+1 cho đặc điểm kỹ thuật – johnbakers

Các vấn đề liên quan