C++ 如何使用模板类允许从浮点赋值到int
我有一个模板类,如下所示:C++ 如何使用模板类允许从浮点赋值到int,c++,templates,operator-overloading,C++,Templates,Operator Overloading,我有一个模板类,如下所示: class Item { T Data; public: Item(): Data() {} void SetData(T nValue) { Data = nValue; } T GetData() const { return Data; } void PrintData() { cout <<
class Item
{
T Data;
public:
Item():
Data()
{}
void SetData(T nValue)
{
Data = nValue;
}
T GetData() const
{
return Data;
}
void PrintData()
{
cout << Data;
}
};
类项目
{
T数据;
公众:
项():
数据()
{}
无效设置数据(T nValue)
{
数据=nValue;
}
T GetData()常量
{
返回数据;
}
void PrintData()
{
cout为此,您需要一个模板化赋值运算符,如下所示:
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);
项目foo;
项目栏(foo);
如何在Item类外部定义Item&operator=(const Item&ref)?这是不可能的。赋值运算符不能是非成员函数。我的意思是如何在类外部提供“operator=”类的定义。也就是说,类内部的Item只有声明Item&operator=(const Item&ref);但是定义是在类外提供的,我如何才能做到这一点?在这种情况下,您不能真正做到这一点,因为运算符是一个模板。您可以在类内编写模板项和运算符=…
,并在头文件中包含类似模板项和项::运算符=…
的定义,但我认为这并不能改善您的工作适应性。您不能将定义放在非头文件中,因为它是一个模板。
template <typename U>
Item(const Item<U> &ref):
Data(ref.Data)
{
};
Item<int> foo;
Item<float> bar(foo);