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);