从r值得到l值

Making l-value from r-value

本文关键字:值得      更新时间:2023-10-16

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

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

我唯一的问题是:因为get返回指针,而不是指针的引用,返回类型是一个右值,这在大多数情况下是好的,但不适合这个。是否有一种方法以某种方式将返回值更改为左值?

您可以简单地使用:

*get<Tag>(t) = value;

指针解引用的结果是一个l值

对指针解引用(使用*操作符)产生一个引用。引用的类型取决于指针的类型。const T *变为const T &, T *变为T &

所以,如果get返回一个指向非const变量的指针,你可以这样写:
*get<Tag>(t) = value;

如果get不满足这样的要求,你不能改变它,你必须给一个set方法来代替。