このようなテンプレートがあります
template <typename T> class Foo
{
public:
Foo(const T& t) : _t(t) {}
private:
const T _t;
};
引数の型がブールや文字のように取るに足らない場合にconst参照の使用を回避するための精通したテンプレートメタプログラミング方法はありますか?お気に入り:
Foo(stl::smarter_argument<T>::type t) : _t(t) {}
1
関数が小さい場合、コンパイラーはそれをインライン化し、参照も存在しないので、私はそれを心配しません。関数が大きい場合、整数を参照にラップするための小さなコストは重要ではありません
—
Alan Birtles
私は完全な転送についてもっと心配し、小さなデータ型の参照を避けます。ほとんどの場合、r値の参照による受け渡しは、値による受け渡しに最適化できると思います。
—
スーパー
答えで指摘されていない、覚えておくべきこと:あなたがやっていることは、暗黙の演繹ガイドを無効にします。で機能するクラステンプレート引数の控除が気になる場合は、明示的な控除ガイドを作成することを忘れないでください
—
ブライアン
Foo
。