[英]Overloading assignment operator when the object is on the right-hand side of the assignment
给出以下代码:
template <typename T>
struct Wrapper {
T value;
Wrapper(T val) : value(val) {}
}
int main() {
Wrapper<int> x(42);
int y = x; // need solution for y = x.value
return 0;
}
有没有办法实现分配
int y = x;
所以它意味着y = x.value。
我知道重载赋值运算符本身是不可能的,因为它适用于赋值左侧的对象,而标准不允许带有两个参数的friend函数。
如果通过重载任何其他运算符或使用一些特殊技巧无法做到这一点,除非通过调用Wrapper类提供的get方法,除非通过调用Wrapper类提供的get方法,否则将如何实现:
int y = x.get();
为什么不直接向T
提供隐式转换
operator T() { return value; }
这将导致赋值运行,因为编译器将尝试将赋值的右侧转换为T
隐式转换将允许成功
请注意,除了分配之外,这将导致其他转换工作。 例如,现在可以将Wrapper<T>
实例作为T
参数传递。 这可能适用于您的特定情况,也可能不适用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.