私が正しく理解していれば、完全転送はユニバーサル参照を使用して、渡された引数が左辺値または右辺値であると推測します。それはいいです。
つまり、この機能を実現するには、テンプレート機能を作成する必要があります。考えられる例の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_if
andを使用することだと思います。しかし、それはより冗長になっています。std::is_same
T
この種の状況のベストプラクティスは何ですか?
編集:
Kerrek SB が提案したように、可能なシナリオを作成しようとしています。
私はstd::vector<double>
メンバーとして持っているクラスを作っています。そして、 も取るコンストラクタを作りたいと思いますstd::vector<double>
。引数が左辺値ならメンバーにコピーしたいが、そうでなければ移動したい。
それはある種の可能な例ですか?