Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
2年前关闭。
分别使用两种数据类型初始化此模板类。一种是int类型,另一种是char指针类型。
情况一:
不需要深度复制。
情况2:
在复制指针时必须进行深度复制。
但是由于这两个类都使用赋值运算符的相同基本副本。我们怎样才能做到这一点?
请提出不包含C ++ 11的解决方案。
在可能的所有其他情况下,您希望
希望这可以帮助!
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
2年前关闭。
#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
情况一:
不需要深度复制。
情况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;
}
希望这可以帮助!
关于c++ - 在类模板中重载赋值运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44176460/
10-12 16:10