2011-12-29 61 views
5

Tôi đang cố gắng để làm chuyên môn hóa để mẫu nhà điều hành, các mẫu trông như thế này:operator() mẫu chuyên môn

template <typename Iterator1, typename Iterator2> 
ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const 

sau khi tôi đã làm chuyên môn trông như thế này:

template <> 
float operator()<float*,float*>(float* a, float const* b, unsigned long size, float worst_dist = -1) const 

i gặp lỗi trong khi biên soạn:

Không thể chuyên chức năng 'toán tử()' trong phạm vi lớp học

Tất cả các chức năng đó đều có trong mẫu cấu trúc

Tôi rất vui khi được trợ giúp. cảm ơn.

+0

Khi bạn nói "đặc điểm kỹ thuật", ý của bạn là "chuyên môn hóa"? –

+0

Tôi nghĩ rằng [câu hỏi/câu trả lời SO này] [1] có thể trả lời những gì bạn đang cố gắng làm. [1]: http://stackoverflow.com/questions/4920068/partially-specializing-member-function-implementations – wilx

+0

'ResultType' là gì? Có phải đó là một trong các thông số mẫu của bạn không? –

Trả lời

7

Tại sao bạn vẫn muốn chuyên gia toán tử này? Bạn sẽ không thể gọi nó bằng cách sử dụng cú pháp phụ thuộc vào chuyên môn (nghĩa là cung cấp rõ ràng [một số] đối số mẫu)! Chỉ cần sử dụng quá tải và bạn sẽ ổn thôi. Mặc dù đôi khi nó được mong muốn hoặc thậm chí cần thiết để sử dụng ký pháp mà bạn chỉ định rõ ràng các đối số mẫu, nó có xu hướng không quan trọng đối với các hàm nói chung để sử dụng chuyên môn hơn là quá tải.

Tôi chỉ đọc mọi thứ trong tiêu chuẩn và thực sự có thể cung cấp chuyên môn rõ ràng, tuy nhiên nó phải nằm ngoài định nghĩa lớp. Ví dụ:

#include <iostream> 

struct foo 
{ 
    template <typename T> void operator()(T const&) { 
     std::cout << "general\n"; 
    } 
}; 

template <> 
void foo::operator()<int>(int const&) { 
    std::cout << "int spec\n"; 
} 

int main() 
{ 
    foo f; 
    f(1.2); 
    f(1); 
    f<double>(1); // <-- ERROR: doesn't work! 
} 

Điều này sẽ có tác dụng tương tự khi sử dụng quá tải. Tuy nhiên, việc sử dụng các đối số mẫu được chỉ định rõ ràng vẫn không hoạt động.

+1

+1 cho quá tải chức năng hơn chuyên môn. – AJG85

+0

tôi hiểu, cảm ơn câu trả lời –

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