私はテンプレートについて学んでおり、このメソッドを実装しようとしました:
template <typename Func, typename Left, typename Right>
void flipArgs(Func* function, Left&& leftArg, Right&& rightArg) {
function(std::forward<Right>(rightArg), std::forward<Left>(leftArg));
}
関数と 2 つのパラメーターを取り、2 つのパラメーターを反転して指定された関数を呼び出します。
次のような関数で正常に動作します。
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