簡體   English   中英

模板函數如何“知道”作為模板參數給出的數組的大小?

[英]How can a template function 'know' the size of the array given as template argument?

在下面的C ++代碼中,模板化的Check函數給出的輸出不是我想要的:它是1而不是3.我懷疑K映射到int* ,而不是int[3] (是一個類型?) 。 我希望它給出與第二個(非模板化)函數相同的輸出,我明確給出了數組的大小...

如果沒有使用宏,有沒有辦法編寫一個接受單個參數但仍知道數組大小的Check函數?

#include <iostream>
using namespace std;

int data[] = {1,2,3};

template <class K>
void Check(K data) {
  cout << "Deduced size: " << sizeof(data)/sizeof(int) << endl;
}

void Check(int*, int sizeofData) {
  cout << "Correct size: " << sizeofData/sizeof(int) << endl;
}

int main() {
  Check(data);
  Check(data, sizeof(data));
}

謝謝。

PS:在實際代碼中,數組是一個結構數組,必須迭代才能進行單元測試。

template<class T, size_t S> 
void Check(T (&)[S]) {  
   cout << "Deduced size: " << S << endl;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM