我可以重载operator =来将类的对象分配给另一个类的变量,但这两个类都来自同一个类模板

时间:2018-05-19 09:54:23

标签: c++ templates operator-overloading template-specialization

例如,我有一个班级

template<class T>
class Number
{
private:
    T number;
public:
    Number(T num)
    {
        number=num;
    }
    void operator=(T num)
    {
        number=num;
    }
}

如何重载assign运算符以分配Number&lt; char&gt;对象为Number&lt; int&gt;类型的变量,或者使用同一模板的另一种类型的参数来专门化一种类型的方法?顺便说一下,是否可以将类模板的别名,数字&lt; char&gt;,作为&#34; MyChar&#34;所以我不需要使用类名号&lt; char&gt;除了别名MyChar

之外

1 个答案:

答案 0 :(得分:2)

使赋值运算符成为具有单独类型参数的模板成员函数:

// Make sure the template on U can access private number
template <class U> friend class Number;

template<class U>
Number<T>& operator=(const Number<U>& num)
{
    number = static_cast<T>(num.number);
    return *this;
}

Demo.