给出以下代码:
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方法之外,你将如何实现它:
int y = x.get();
答案 0 :(得分:7)
为什么不直接向T
operator T() { return value; }
这将导致赋值运行,因为编译器将尝试将赋值的右侧转换为T
。隐式转换将允许成功
请注意,除了分配之外,这将导致其他转换工作。例如,现在可以将Wrapper<T>
个实例作为T
参数传递。这可能适用于您的特定情况,也可能不适用