7

给定以下代码:

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

1 回答 1

7

为什么不只提供一个隐式转换为T

operator T() { return value; } 

这将导致赋值起作用,因为编译器将尝试将赋值的右侧转换为T. 隐式转换将允许它成功

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

于 2013-08-12T20:42:23.060 回答