允许将类指定为零

时间:2016-11-23 18:31:09

标签: c++ operator-overloading

我正在编写模板函数,我想将模板变量初始化为零。我在考虑将变量设置为零,然后让类类型定义自己的“零”定义:

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'转换为非标量类型......”。我怎样才能做到这一点?或者有更好的方法来做我想做的事情吗?

2 个答案:

答案 0 :(得分:2)

您的代码存在的问题是T data = 0;实际上调用的是构造函数,而不是operator=。因此,为了使代码正常工作,您需要声明一个接受int

的构造函数

答案 1 :(得分:0)

您应该注意将您的课程分配给0。你应该使用大括号初始化:

template <class T> T test(){
    T data{};
    return data;
}

它会正确构造任何默认的可构造类型,并且会初始化内置类型,例如doubleint