当对象位于赋值的右侧时,重载赋值运算符

时间:2013-08-12 20:41:14

标签: c++ operator-overloading

给出以下代码:

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();

1 个答案:

答案 0 :(得分:7)

为什么不直接向T

提供隐式转换
operator T() { return value; } 

这将导致赋值运行,因为编译器将尝试将赋值的右侧转换为T。隐式转换将允许成功

请注意,除了分配之外,这将导致其他转换工作。例如,现在可以将Wrapper<T>个实例作为T参数传递。这可能适用于您的特定情况,也可能不适用