2012-10-23 38 views
11

tôi có thể xác định một chức năng chuyên ngành trong một cpp như vậy ...Xác định chuyên môn mẫu trong cpp?

// tiêu đề

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

template<> 
void func<int>(int); 

// cpp

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

Làm thế nào tôi có thể xác định một phương pháp trong một lớp học chuyên ngành trong một cpp? Như vậy (mà không làm việc, tôi nhận được error C2910: 'A<int>::func' : cannot be explicitly specialized) ...

// tiêu đề

template<typename T> 
struct A 
{ 
    static void func(T){} 
}; 

template<> 
struct A<int> 
{ 
    static void func(int); 
}; 

// cpp

template<> 
void A<int>::func(int) 
{} 
+0

Bạn có kiểm tra này: http://stackoverflow.com/questions/115703/storing-c-template-function-definitions-in-a-cpp-file – Reunanen

+0

@Pukku Đó mối quan tâm chuyên môn của một phương pháp trong một lớp không được tạo khuôn mẫu, thực sự giống như chuyên môn hóa của một hàm độc lập (như trong ví dụ làm việc của tôi ở trên). Tôi hỏi về việc xác định một phương thức trong một _class_ chuyên biệt trong một cpp. – David

Trả lời

4

Sử dụng sau cú pháp trong tập tin .cpp của bạn:

void A<int>::func(int) 
{ 
} 

Đây là tính năng Visual C++ kinda.

Xem MSDN C2910 error description để biết chi tiết:

Lỗi này cũng sẽ được tạo ra như là kết quả của công việc biên dịch phù hợp đã được thực hiện trong Visual Studio .NET 2003 :. Đối với mã sẽ có giá trị trong Visual Studio.NET 2003 và Visual Studio.NET phiên bản của Visual C++, loại bỏ mẫu <>.

+3

Đây là một tính năng phụ thuộc trình biên dịch của Visual Studio. Xem câu hỏi http://stackoverflow.com/questions/3749099/why-should-the-implementation-and-the-declaration-of-a-template-class-be-in-the và http://stackoverflow.com/ câu hỏi/495021/tại sao có thể-chỉ-được-thực hiện-trong-the-header-file – 8bitwide

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