给定以下代码:
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 。
我知道重载赋值运算符本身是不可能的,因为它适用于赋值左侧的对象,并且标准不允许带有两个参数的友元函数。
如果通过重载任何其他运算符或使用一些特殊技巧无法做到这一点,您将如何实现它,除非调用 Wrapper 类提供的 get 方法,例如:
int y = x.get();
最佳答案
为什么不直接提供到 T
的隐式转换呢?
operator T() { return value; }
这将导致赋值起作用,因为编译器将尝试将赋值的右侧转换为 T
.隐式转换将允许它成功
请注意,这将导致除赋值之外的其他转换起作用。例如,现在可以传递 Wrapper<T>
实例为 T
参数。这可能适用于您的特定场景,也可能不适用
关于c++ - 当对象位于赋值的右侧时重载赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18196319/