我有一个非常漂亮的get fnc,它返回指向'a type'的指针。现在我想在fnc set中重用这个fnc来为get返回的这个类型设置一些值:
template<class Tag,class Type>
set(Type t, some_value)
{
get<Tag>(t) = value;
}
我唯一的问题是:因为get返回指针而不是对指针的引用,所以返回类型是一个rvalue,对于大多数情况来说很好但不适用于此。有没有办法以某种方式将返回值更改为左值?
答案 0 :(得分:5)
你可以简单地使用它:
*get<Tag>(t) = value;
取消引用指针的结果是l值。
答案 1 :(得分:2)
取消引用指针(使用*
运算符)会产生引用。引用的类型取决于指针的类型。 const T *
变为const T &
,而T *
变为T &
。
因此,如果get
返回指向非const
变量的指针,则可以写:
*get<Tag>(t) = value;
如果get
不符合此要求,而您无法更改,则必须改为使用set
方法。