我有一个模板函数:
template<typename T>
void doSomething(T& value) {
// doSomething here
}一切正常,但传递r值引用:
doSomething(getTempVal());生成no matching function for call错误,因为特定实例化函数模板expects an l-value for 1st argument。在不添加新模板的情况下,允许模板函数同时使用lvalue和rvalue引用,有什么解决办法吗?
发布于 2014-12-11 10:23:48
是的,只需使用&&而不是&。
这可能看起来很奇怪,因为您可能认为这将不允许用lvalue调用它,但是实际上,如果T本身是一个lvalue引用类型,那么T &&就是T:它不会变成一个rvalue引用类型。
换句话说,
template <typename T>
void f(T &&);
int main() {
int k = 1;
f(k); // okay: calls f<int&>
f(2); // okay: calls f<int>
}请注意,可以将T推断为引用类型,并且需要制作函数体来处理这个问题。
https://stackoverflow.com/questions/27420404
复制相似问题