編集:私が尋ねることの最も有望なユースケースは、std::forward_as_tuple()
からrvalue-referencesのタプルを受け取る関数を作成するときです。私はメンバーに彼らが右辺値、参照したかどうかを確認するために、コンストラクタの初期化子に渡されたオブジェクトのをチェックしていたので、この質問が頭に浮かんだstd :: forward_as_tuple()の結果を、そのオブジェクトのrvalue-referenceメンバーから移動できる複数の関数に渡しますか?
理由は(私はこれは間違っている間違って間違っていることを私に言ってアドバイスを開いているです...うまくいけば、これを避けるための経験則が将来的に続いていますが、それが質問を促した理由です)。わずかに異なる文脈では、私はrvalue-referenceメンバーを持つオブジェクトを複数の関数(または関数オブジェクト)に渡してしまうかもしれないということが起こりました。
template<typename... Args>
void my_func(std::tuple<Args...>&& tup) {
//if tup's members are rvalue references,
//and this function moves guts from tup members, then...
func_i_dont_control(tup);
//what happens here if moves are done on the same members?
another_func_i_dont_control(std::move(tup));
}
私は右辺値参照のメンバーの他のいくつかの議論とともに、Use of rvalue reference members?見てきたが、私は決定的にこれを整理するのは非常にできませんよ。
私はちょうど何が起こるかを尋ねるが、このシナリオでは、/、まったく起こり得るべきであり、右辺値参照メンバーを含むオブジェクトの周りに渡すとき、キー何のルール心に留めておくかどうかではありませんよ。
あなたの例では 'tup'を送りませんか? –
ええと、tup自体がテンプレート引数ではないのに、私はまだそれをしますか?私は完璧な転送でまだ少し緑色です。 –
関数テンプレートパラメータとして不完全な型がある場合は、それを転送してください。 –