1
在下面的代码,我有其中的长度参数必须传递的函数,就像这样:编译器如何处理这个模板函数没有大小参数
int recv(char* buf, int len);
但是便利是写一个帮手像这样的功能:
template <size_t N>
int recv(char(&array)[N]) {
return recv(array, N);
}
这意味着你可以通过一个数组,编译器以某种方式“知道”的大小,所以你不必通过。
但是,当我以前使用的模板,我需要通过类型,例如
std::vector<int> myvec;
但如何运作的?在内部,编译器正在做什么来解决这个问题?这个特性的名字是什么?
请解释语法。
#include <string.h>
#include <iostream>
class test_recv
{
public:
test_recv() {
strcpy(arr, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
}
int recv(char* buf, int len) {
int tmp = pos;
while (len-- && pos < 26)
*buf++ = arr[pos++];
return pos - tmp;
}
template <size_t N>
int recv(char(&array)[N]) {
return recv(array, N);
}
private:
int pos = 0;
char arr[26+1];
};
int main() {
test_recv test;
char buffer[10];
int bytes;
while ((bytes = test.recv(buffer, 10)) != 0) {
for (int i = 0; i < bytes; ++i)
std::cout << buffer[i];
}
std::cout << '\n';
test_recv test2;
char buffer2[10];
while ((bytes = test2.recv(buffer2)) != 0) {
for (int i = 0; i < bytes; ++i)
std::cout << buffer2[i];
}
}
“但是,当我以前使用过模板时,我需要传递类型”尝试函数模板,比如'std :: find'。 – juanchopanza