私は C++ で右辺値参照を使用するのが初めてで、日常生活でそれらを使用する方法を学びたいと考えています。一般的なユースケースに関する 2 つの関連する質問があります。boost::in_place と boost::bind での右辺値参照の使用です。
- boost::in_place での右辺値参照の使用
コンストラクターが右辺値参照をパラメーターとして受け取るクラスを考えてみましょう。
struct A
: boost::noncopyable
{
A(int&&){}
};
それでは、このクラスのブースト オプション変数を作成してみましょう。
void foo(int&& value)
{
boost::optional<A> opt;
// some code here
opt = boost::in_place(std::forward<int>(value)); //Error!
}
このような例で右辺値参照を渡す正しい方法は何ですか。右辺値参照用のboost::reference_wrapperのような解決策はありますか?
- 右辺値参照を使用してバインド ファンクターを関数オブジェクトに渡す
もう 1 つの一般的な使用例は、boost::bind ファンクター オブジェクトを boost::function オブジェクトに割り当てることです。
void foo(int&&)
{
}
void bar()
{
boost::function<void(int&&)> func;
int x = 0;
func = boost::bind(foo, std::move(x)); // Compilation error (a)
func = boost::bind(foo, _1); // Compilation error too (b)
}
命令 (a) は最初の呼び出し後に未定義の変数値につながる可能性があることを理解していますが、命令 (b) にはそのような問題さえありません。しかし、このコードを正しく記述する方法は?