模板对象可以更改其类型吗?

Ham*_*ame 4 c++ templates

我有以下课程

template <typename T> class Item {

public:

    T item;
    Item () : item( T() ) {}
    Item (T arg) { this->item = arg;}

    operator T () const {
        return item;
    }

};
Run Code Online (Sandbox Code Playgroud)

现在我想写一个赋值运算符,它也改变了对象的类型.这甚至可能吗?我用谷歌搜索了它,但是没有任何相关的东西(顺便说一句,这让我觉得我可能不在乎).

为了清楚说明,我要说我有以下两个对象:

Item <int> intItem = 3;
Item <double> doubleItem = 3.4;
Run Code Online (Sandbox Code Playgroud)

我希望能够写作

intItem = doubleItem;
Run Code Online (Sandbox Code Playgroud)

并且,在此之后,我想要intItem的类型Item<double>.

如果我只想要一个"经典"赋值运算符,那么如果在我的课程中,我会有类似的东西,它会工作得很好

Item<int>& operator= (const Item<double> & var) {
    this->item = var.item;
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

double值将被舍入,但它会起作用.哦,intItem的类型将保留 Item<int>

PS:我知道工会和被标记的工会,我不想用它.我的Item班级应该表现得像"标记的联盟".

所以请给我一个答案,或者告诉我,我在做梦.

Som*_*ude 6

不,你不能在运行时更改类型,因为模板是编译时的事情.

实际上,它就像将变量声明为int并尝试将其更改为a float.是的,您可以将变量分配给另一个float变量,但不能更改实际变量的类型.