右辺値引数を取るメンバー関数にバインドされた std::function を作成したいと思います。これがコンパイルされない私の試みです(「xxfunction(154):エラーC2664:...特に、左辺値を右辺値参照にバインドできません」)。
class C
{
public:
void F(std::string &&s)
{
//do something with s
}
C(){}
};
C c;
std::function<void(std::string&&)> pF = std::bind(&C::F,&c,std::placeholders::_1);
//somewhere far far away
pF(std::string("test"));
私はいくつかの読書をしましたが、完全な転送を使用しない std::function に関係していると思いますが、それを機能させる方法がわかりません。
編集:
std::function<void(std::string&)> pF = [&c](std::string&in){c.F(std::move(in));};
これはある程度実行可能な回避策ですが、pF の呼び出しは左辺値で機能し、とにかくそれを移動するため、完全ではありません。
std::string s("test");
pF(s);
auto other = s; //oops