c++ - 如何使用模板类允许从 float 到 int 的赋值

标签 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 << Data;
    }
};

可以执行以下操作:

Item<int> item1;
Item<int> item2;
item1 = item2;

但是当我执行以下操作时,我收到编译时错误:

Item<int> item1;
Item<float> item2;
item1 = item2;

显然,编译器不允许这样做,因为item1int类型,但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/

相关文章:

c++ - 让编译器在编译前推断出函数的参数

c++ - 在模板中返回一个迭代器

C++ 对构造函数的模糊调用

c++ - 错误 : 'CAtlServiceModuleT' : is not a member of 'ATL'

c++ - 有效的容器,保持顺序并快速从任何位置删除元素

c++ - 是否有用于从点语言字符串制作 png 的 C++ 函数?

javascript - Handlebars.js 和 SEO

模板类上的 C++ 运算符重载

delphi - Delphi 中重载记录的隐式转换作为 const 数组中的参数

C++ 函数指针 'base'