繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM