Tôi đang phát xung quanh với chuyên môn về mẫu và tôi đã tìm thấy một vấn đề mà tôi dường như không thể giải quyết; đây là mã của tôi:Chuyên môn về mẫu C++ về các chức năng
template<int length, typename T>
void test(T* array)
{
...
test<length-1>(array);
}
template<typename T>
void test<0>(T* array)
{
return;
}
Vì vậy, những gì tôi đang cố gắng làm là vượt qua độ dài, những gì sẽ được xử lý trong mẫu.
Vấn đề là, rằng việc biên soạn này, cũng quả đầu ra mãi mãi:
a.cpp:83:43: error: template-id 'test<0>' in declaration of primary template
a.cpp: In function 'void test(T*) [with int length= -0x000000081, T = int]':
a.cpp:77:9: instantiated from 'void test(T*) [with int length= -0x000000080, T = int]'
a.cpp:77:9: instantiated from 'void test(T*) [with int length= -0x00000007f, T = int]'
a.cpp:77:9: [ skipping 151 instantiation contexts ]
a.cpp:77:9: instantiated from 'void test(T*) [with int length= 28, T = int]'
a.cpp:77:9: instantiated from 'void test(T*) [with int length= 29, T = int]'
...
a.cpp: In function 'void test(T*) [with int length= -0x000000082, T = int]':
a.cpp:77:9: instantiated from 'void test(T*) [with int length= -0x000000081, T = int]'
a.cpp:77:9: instantiated from 'void test(T*) [with int length= -0x000000080, T = int]'
cuối hai dòng, là khá nhiều giống như những người đầu tiên.
Đối với tôi nó sẽ có vẻ, nó không thu hút sự chuyên môn hóa, do đó:
a.cpp:83:43: error: template-id 'test<0>' in declaration of primary template
Tôi thích hợp?
Và nếu tôi đúng, tôi đoán đó là vấn đề chuyên môn hóa một phần mẫu không được phép cho các mẫu chức năng, vậy thì giải pháp sau đó là gì, tạo cấu trúc và sử dụng chuyên môn về điều đó?
Vì vậy, giải pháp của tôi là gì, sử dụng cấu trúc và tạo chức năng trình bao bọc? – Skeen
Và tại sao nó không được phép? - chỉ tò mò thôi. – Skeen