我有一个模板类,如下所示:
class Item
{
T Data;
public:
Item():
Data()
{}
void SetData(T nValue)
{
Data = nValue;
}
T GetData() const
{
return Data;
}
void PrintData()
{
cout << Data;
}
};
可以执行以下操作:
Item<int> item1;
Item<int> item2;
item1 = item2;
但是当我执行以下操作时,我收到编译时错误:
Item<int> item1;
Item<float> item2;
item1 = item2;
显然,编译器不允许这样做,因为item1
是int类型,但item2是float类型。
如何实现第二部分?
最佳答案
为此,您需要一个模板化的赋值运算符,如下所示:
template <typename T>
class Item {
/* more */
public:
template <typename U>
Item &operator=(const Item<U> &ref)
{
Data = ref.Data;
return *this;
};
/* more */
};
除此之外,您可能需要或想要一个模板化的复制构造函数:
template <typename U>
Item(const Item<U> &ref):
Data(ref.Data)
{
};
这允许:
Item<int> foo;
Item<float> bar(foo);
关于c++ - 如何使用模板类允许从 float 到 int 的赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23479133/