2つのデータ型を含むペアを返す関数を作成しようとしています。最初の型は常に同じですが、2つ目はテンプレート型です。それも可能ですか? (std::forward
の使用についての私の理解が正しいかどうかも疑問です)。私の問題をよりよく実証するために、私の(動作していない)コードのサンプルを簡略化して表示します。std :: make_pairをstd :: forwardで返す
は、ここに私が試したものです:関数の内部
template <class X>
std::pair<int, X> func(X&& second)
{
int first = 1;
return std::make_pair(std::move(first), std::forward<X>(second));
}
は、私は変数first
を作成し、その後、私はペアを返すようにしたいです。ここではfirst
をコピーするのを避けるために - そして、がl-valueだったかどうかに応じて、std::forward
を "条件付き移動"として説明したScott Meyersの講義に従います。second
をl-値として渡したい場合はstd::make_pair
second
のコピー、ペアを作成するとき)、またはr値だった場合は、「移動した」r値を渡したいと思います。
残念ながら私のコードは機能しません。私は何か誤解しているに違いないと思っていますが、何が分かりませんか、私に説明してください。
"私のコードは機能しません" - 何がうまくいかない?エラーメッセージとは何ですか? – Rakete1111
@ Rakete1111問題はfuncのl-value引数に渡されました。これは 'std :: make_pair'を参照として導き出されました。 skypjackのおかげで問題は解決しました。 – mdjdrn1
@ mdjdrn1とにかくRakete1111が正しいです、次回あなたの質問に沿ってエラーメッセージを投稿してください。それは助けに来る人々を助けるでしょう。 ;-) – skypjack