我有以下实施:
#include <cstddef>
template<typename Data, size_t Size>
class Demo
{
public:
Demo();
private:
Data data[Size];
};
void f(Demo<int, size_t>& demoObj)
{
}
int main()
{
Demo<int, 100> demoObj;
}
编译时出现以下错误:
g++ -std=c++11 temp.cpp
temp.cpp:13:24: error: type/value mismatch at argument 2 in template parameter list for ‘template<class Data, long unsigned int Size> class Demo’
void f(Demo<int, size_t>& demoObj)
^
temp.cpp:13:24: note: expected a constant of type ‘long unsigned int’, got ‘size_t {aka long unsigned int}’
错误对我没有意义。请帮我理解。另外,如何将demoObj传递给函数f?我的意思是如何写出f的定义。
答案 0 :(得分:6)
Size
是一个非类型参数,因此它需要一个非类型参数:
void f(Demo<int, 100>& demoObj);
// ^^^
答案 1 :(得分:3)
如果您希望能够传递任何类型的演示,可以将f
定义为模板函数。
template<typename Data, size_t Size>
void f(Demo<Data, Size>& demoObj)
{
// ...
}