我正在编写模板函数,我想将模板变量初始化为零。我在考虑将变量设置为零,然后让类类型定义自己的“零”定义:
T data = 0;
我尝试重载赋值运算符:
class Example{
public:
int data;
Example(){}
Example& operator=(int v){
data = v;
return *this;
}
};
template <class T> T test(){
T data = 0;
return data;
}
int main(int argc, char** argv){
double v1 = test<double>();
Example v2 = test<Example>();
return 1;
}
...但是编译器给了我“错误:从'int'转换为非标量类型......”。我怎样才能做到这一点?或者有更好的方法来做我想做的事情吗?
答案 0 :(得分:2)
您的代码存在的问题是T data = 0;
实际上调用的是构造函数,而不是operator=
。因此,为了使代码正常工作,您需要声明一个接受int
。
答案 1 :(得分:0)
您应该注意将您的课程分配给0
。你应该使用大括号初始化:
template <class T> T test(){
T data{};
return data;
}
它会正确构造任何默认的可构造类型,并且会初始化内置类型,例如double
或int
。