2013-02-08 24 views
11

Tôi cần chuyên mẫu chức năng trong C++.Chuyên môn về mẫu cho một hàm không có tham số

template<typename T> 
void doStuff<T>() {} 

Để

template<> 
void doStuff<DefinedClass>(); 

template<> 
void doStuff<DefinedClass2>(); 

Tôi đoán đó không phải là cú pháp chính xác (vì nó không được biên dịch). Tôi nên làm như thế nào?
Ngoài ra, Vì tôi sẽ không có thông số mẫu không xác định trong doStuff<DefinedClass>, bạn có thể khai báo nội dung trong tệp .cpp không?

Lưu ý: doStuff sẽ sử dụng T wihtin cơ thể của nó để khai báo biến.

+1

Khi bạn nói "nó không được biên dịch", bạn nên bao gồm các thông báo lỗi liên quan. –

+0

Có 'template void doStuff () {}' thậm chí biên dịch ở nơi đầu tiên (tôi nghĩ rằng điều này '' không hợp lệ). –

Trả lời

12

Mẫu chính không nhận được cặp đối số mẫu thứ hai. Chỉ cần này:

template <typename T> void doStuff() {} 
//      ^^^^^^^^^ 

Chỉ có các chuyên ngành có cả một template <> ở phía trước và một <...> sau tên, ví dụ:

template <> void doStuff<int>() { } 
+0

Cảm ơn, nhưng vẫn không hoạt động. Nếu tôi viết chuyên môn như: "template <> void doStuff();" Tôi nhận được: "mã hóa không hợp lệ rõ ràng trước khi '>' mã thông báo" –

+0

Nếu tôi đặt "mẫu " Tôi nhận "template-id' buildBom 'trong khai báo mẫu chính " –

+2

Không, nó phải là' template <> void doStuff (); 'để chuyên môn hóa và' mẫu void doStuff(); 'cho trường hợp chung ... – Synxis

4

Cú pháp chính xác cho các mẫu chính là:

template <typename T> 
void doStuff() {} 

Để xác định chuyên môn, hãy thực hiện việc này:

template <> 
void doStuff<DefinedClass>() { /* function body here */ } 
2

Tôi đoán đó không phải là cú pháp chính xác (vì nó không được biên dịch). Tôi nên làm như thế nào? doStuff sẽ sử dụng T wihtin cơ thể của nó để khai báo một biến.

template<typename T> 
void doStuff() 
{ 
    T t = T(); // declare a T type variable 

} 

nó sẽ có thể tuyên bố cơ thể trong một cpp?

C++ chỉ hỗ trợ inclusive mode chỉ, bạn không thể biên dịch riêng lẻ sau đó liên kết sau đó.

Từ nhận xét, nếu bạn muốn chuyên cho int loại:

template<> 
void doStuff<int>() 
{ 
}