类模板中的重载赋值运算符
Overloading assignment operator in a class template
#ifndef NUMBER_HPP
#define NUMBER_HPP
template <class T>
class Number
{
public:
Number( T value ) : m_value( value )
{
}
T value() const
{
return m_value;
}
void setValue( T value )
{
m_value = value;
}
Number<T>& operator=( T value )
{
m_value = value;
}
// template <class T2>
// Number<T2>& operator=( const Number<T>& number )
// {
// m_value = number.value();
// return *this;
// }
private:
T m_value;
};
typedef Number<int> Integer;
typedef Number<char*> Float;
#endif // NUMBER_HPP
此模板类分别使用两种数据类型进行初始化。 一个是 int 类型,另一个是 char 指针类型。
typedef Number<int> Integer1,Integer2;
typedef Number<char*> Char1,Char2;
Integer2.setValue(2) ;
Char2.setValue("ABC");
Integer1 = Interger2;//Case 1
Char1 = Char2; // Case 2
在案例 1 中:不需要深拷贝。
在案例 2 中:深拷贝是必须的,因为我们正在复制指针。
但是由于这两个类都使用相同的赋值运算符的基本副本。 我们如何实现这一目标?
请提出一个不包括C++ 11的解决方案。
也许你只是想重载你的operator=
:
template <class T2>
Number<T>& operator=( const Number<T2*>& number )
{
// Deep Copy
}
template <class T2>
Number<T>& operator=( const Number<T2>& number )
{
// Shallow Copy
}
在所有其他情况下,您可能希望std::enable_if
根据类型静态决定应使用哪个副本策略(很可能它是否是指针类型,因此例如 std::is_pointer<T2>::value
(。然后,这可以通过if constexpr
(C++17(非常容易地简化:
#include <type_traits>
template <class T2>
Number<T>& operator=( const Number<T2>& number )
{
if constexpr( std::is_pointer_v<T2> ){
// Deep Copy
}
else{
// Shallow Copy
}
return *this;
}
希望这有帮助!
我认为这就是你要找的。 您正在为T
分配T2
。 这意味着我们需要取一个Number<T2>
,将值转换为T
,然后分配给this
并return *this
。
template <class T2 >
Number<T>& operator=( const Number<T2>& number )
{
m_value = T( number.value() );
return *this;
}
相关文章:
- 为什么初始化时没有调用重载赋值运算符?
- 在类外重载赋值运算符
- 重载赋值运算符函数和复制构造函数中的错误
- 为多个签名使用相同的代码重载赋值运算符?
- 错误消息:使用复制构造函数和重载赋值运算符
- 类模板中的重载赋值运算符
- C++库类的重载赋值运算符
- 为什么为单个赋值操作调用复制构造函数和重载赋值运算符
- 如何重载赋值运算符以满足 ob1=ob2=ob3(ob1,ob2,ob3 是同一类的对象)
- 带有非类型参数的C++模板类:如何重载赋值运算符
- C++重载赋值运算符在不相关的类中被调用
- C++重载赋值运算符声明中做什么?
- 在c++中操作重载赋值运算符
- 如何避免重载赋值运算符将右值转换为左值
- 重载赋值运算符的问题
- 复制构造函数、重载赋值运算符和deepCopy
- 重载赋值运算符带下标运算符
- 如何在不重载赋值运算符的情况下运行此代码
- 重载赋值运算符 - 多态容器
- 如何重载赋值运算符以允许我的类等于基元类型,例如'int'