我一直在尝试使用模板成员函数来设置类内的值。我想使用通用引用,以便可以接受正确类型的任何变体(例如T
、T&
、T&&
、const T
、const T&
、const T&&
)。
然而,似乎我的成员函数只能接受右值引用,而不像一个接受通用引用的自由函数。
template <typename T>
class Foo{
public:
void memberURef(T&& t){
val = std::forward<T>(t);
}
private:
T val;
};
template <typename T>
void freeURef(T&& t){
}
int main() {
int lval = 1;
const int clval = 1;
freeURef(lval); // fine
freeURef(clval); // fine
Foo<int> foo;
foo.memberURef(2);
foo.memberURef(lval); //error: cannot bind 'int' lvalue to 'int&&'
foo.memberURef(clval); //error: no matching function for call to 'Foo<int>::memberURef(const int&)'
return 0;
}