我正在编写模板函数,我想将模板变量初始化为零.我在考虑将变量设置为零,然后让类类型定义自己的“零”定义:
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’转换为非标量类型……”.我怎样才能做到这一点?或者有更好的方法来做我想做的事情吗?
最佳答案 你的代码的问题是T data = 0;实际上调用构造函数,而不是operator =.因此,为了使代码能够工作,您需要声明一个接受int的构造函数.