私が正しく理解していれば、完全転送はユニバーサル参照を使用して、渡された引数が左辺値または右辺値であると推測します。それはいいです。
つまり、この機能を実現するには、テンプレート機能を作成する必要があります。考えられる例の1つは次のとおりです。
template <class T>
void func(T&& str){
auto s = std::forward<T>(str);
cout << s << endl;
}
ただし、それが唯一Tであるfuncべきだとわかっている場合はどうなりstd::stringますか? 考えられるオプションの 1 つは、 type を制限するためにstd::enable_ifandを使用することだと思います。しかし、それはより冗長になっています。std::is_sameT
この種の状況のベストプラクティスは何ですか?
編集:
Kerrek SB が提案したように、可能なシナリオを作成しようとしています。
私はstd::vector<double>メンバーとして持っているクラスを作っています。そして、 も取るコンストラクタを作りたいと思いますstd::vector<double>。引数が左辺値ならメンバーにコピーしたいが、そうでなければ移動したい。
それはある種の可能な例ですか?