我有以下课程
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班级应该表现得像"标记的联盟".
所以请给我一个答案,或者告诉我,我在做梦.
不,你不能在运行时更改类型,因为模板是编译时的事情.
实际上,它就像将变量声明为int并尝试将其更改为a float.是的,您可以将变量分配给另一个float变量,但不能更改实际变量的类型.