我正在学习模板并尝试实现此方法:
template <typename Func, typename Left, typename Right>
void flipArgs(Func* function, Left&& leftArg, Right&& rightArg) {
function(std::forward<Right>(rightArg), std::forward<Left>(leftArg));
}
它接受一个函数和两个参数,并在两个参数翻转的情况下调用给定的函数。
它适用于以下功能:
void test1(std::string, int) {
}
当我尝试这个功能时:
template <typename T>
void test2(T&& a, int) {
}
和:
string s("test");
flip(test2<string>, 42, s);
编译器(g++ 4.7.1)告诉我:
错误:无法将“std::basic_string”左值绑定到“std::basic_string&&”
我认为一个函数参数T&&
是一个可以绑定rvalue
和lvalue
引用的特殊情况?我究竟做错了什么?