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