从r值中得到l值

时间:2011-07-23 15:50:43

标签: c++

我有一个非常漂亮的get fnc,它返回指向'a type'的指针。现在我想在fnc set中重用这个fnc来为get返回的这个类型设置一些值:

template<class Tag,class Type>
set(Type t, some_value)
{
get<Tag>(t) = value;
}

我唯一的问题是:因为get返回指针而不是对指针的引用,所以返回类型是一个rvalue,对于大多数情况来说很好但不适用于此。有没有办法以某种方式将返回值更改为左值?

2 个答案:

答案 0 :(得分:5)

你可以简单地使用它:

*get<Tag>(t) = value;

取消引用指针的结果是l值。

答案 1 :(得分:2)

取消引用指针(使用*运算符)会产生引用。引用的类型取决于指针的类型。 const T *变为const T &,而T *变为T &

因此,如果get返回指向非const变量的指针,则可以写:

*get<Tag>(t) = value;

如果get不符合此要求,而您无法更改,则必须改为使用set方法。