代码之家  ›  专栏  ›  技术社区  ›  Xavier Nodet

模板函数如何“知道”作为模板参数给定的数组的大小?

  •  2
  • Xavier Nodet  · 技术社区  · 16 年前

    在下面的C++代码中,模板化检查函数给出的输出不是我想要的:它是1而不是3。 int* int[3] (那是一种类型吗?)。我希望它能提供与第二个(非模板化)函数相同的输出,我明确给出了数组的大小。。。

    除了使用宏,还有没有办法编写一个接受单个参数但仍然知道数组大小的检查函数?

    #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:在实际代码中,数组是一个结构数组,单元测试必须对其进行迭代。

    1 回复  |  直到 16 年前
        1
  •  10
  •   Alexey Malistov    16 年前
    template<class T, size_t S> 
    void Check(T (&)[S]) {  
       cout << "Deduced size: " << S << endl;
    }