C++ 重载可以强制转换为其他模板类型的类模板中的赋值运算符

C++ 重载可以强制转换为其他模板类型的类模板中的赋值运算符,c++,templates,casting,C++,Templates,Casting,其中a将被强制转换为int,并给出b的值,但仍然是classNumber的实例 可能吗?你能帮我吗 提前感谢。您应该这样做: Float a(10); Integer b(20); a = b; 我认为,如果您想使用类类型作为模板参数,并且其构造函数已声明为显式的,最好使用显式强制转换: template <class U> Number<T>& operator=( const Number<U>& number ) { m_va

其中
a
将被强制转换为
int
,并给出
b
的值,但仍然是class
Number
的实例

可能吗?你能帮我吗

提前感谢。

您应该这样做:

Float a(10);
Integer b(20);

a = b;
我认为,如果您想使用类类型作为模板参数,并且其构造函数已声明为显式的,最好使用显式强制转换:

template <class U>
Number<T>& operator=( const Number<U>& number )
{
    m_value = number.m_value; //I would also directly access the member variable!
    return *this;
}

您的一些
T
s位于错误的位置。应该是

Number<T>& operator=(T const & value ) //accept by const reference
{
    m_value = value;
    return *this; //you've to return!
}
模板
编号和运算符=(常量编号和编号)
{
m_值=number.value();
归还*这个;
}
这会让你做的

template <class T2>
Number<T>& operator=( const Number<T2>& number )
{
    m_value = number.value();
    return *this;
}
整数a(4);
浮球b(6.2f);
a=b;

难道默认赋值运算符与构造函数提供的隐式转换结合起来有什么问题吗?这将完全符合您的操作员正在尝试做的事情,而不必编写任何代码。这是一段时间以来,我做了C++,但您也可以重写CAST /转换运算符。SethCarnegie问我取消对代码的注释时发生了什么,在取消注释的同时,我意识到检查结果的方法是使用printf()使用%d而不是浮点数的%f。傻。谢谢你们两位。
 m_value = static_cast<T>(number.m_value); 
Number<T>& operator=(T const & value ) //accept by const reference
{
    m_value = value;
    return *this; //you've to return!
}
template <class T2>
Number<T>& operator=( const Number<T2>& number )
{
    m_value = number.value();
    return *this;
}
Integer a(4);
Float b(6.2f);

a = b;

cout << a.value() << endl;