2011-07-03 44 views
7

Thay vìTại sao chúng ta phải làm template <class/typename> T thay vì chỉ mẫu T

template <typename T> 
void func(T arg) {/* something */} 

tại sao chúng ta không thể làm

template <T> 
void func(T arg) {/* something */} 

Từ cplusplus.com:

Sự khác biệt duy nhất giữa cả hai mẫu là việc sử dụng lớp từ khóa hoặc tên kiểu từ khóa. Việc sử dụng nó không rõ ràng, vì cả hai biểu thức đều giống hệt nhau ý nghĩa và hành xử giống hệt cách .

Nó có vẻ như là bản mẫu không cần thiết cho tôi.

Trả lời

11

http://www.cplusplus.com/doc/tutorial/templates/ Xem phần Tham số không phải kiểu cho mẫu.

Bạn cần một số từ khóa để phân biệt loại thông số với các tham số không phải loại.

template <class T, int N> 
class mysequence { 
    T memblock [N]; 
    public: 
    void setmember (int x, T value); 
    T getmember (int x); 
}; 
+0

Hoặc thậm chí 'mẫu >', để hiển thị tất cả ba đối số mẫu có thể có. – MSalters

8

Vì đối số mẫu không phải lúc nào cũng loại. Bạn có thể có đối số mẫu là một giá trị tích phân, ví dụ như trong trường hợp std::bitset<size_t N>.

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