【发布时间】:2017-05-25 09:02:05
【问题描述】:
#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 的解决方案。
【问题讨论】:
-
所以,您可以为此进行模板专业化。
-
这不仅仅是关于 char*。它可能有 int* 、 float* 以及自定义数据类型。
-
限制自己使用具有值语义的东西作为临时参数
标签: c++