3

const 参照によって パラメーターを受け取ることができる任意のテンプレート メソッドがあるとします(明らかに、自明な型とそれに応じたオブジェクトの場合)。

テンプレート関数のプロトタイプを作成するとき、この状況はどのように処理されますか?

私は次のようなものを作ることができます:

template <typename T> void Foo(T value) {
   // Do something.
}

template <typename T> void Foo(const T& value) {
   // Do something, yeah.
}

// Specialization for first prototype. 
template <> void Foo<int>(int value) { }

// Specialization for second prototype. 
template <> void Foo<Object>(const Object& value) { }

ただし、このアプローチは、他の呼び出しのラッパーとして純粋に機能する単純な関数に対してのみ有効です。

関数(テンプレート化されていないバージョン)に多くのコードが含まれている場合、コードを 2 回コピーする必要があります。

ここでもっとスマートにできますか?

4

2 に答える 2

7

const参照としてプリミティブ型を渡す際のオーバーヘッドはあまりないため、常にconst参照を使用してください。

于 2010-10-12T14:17:03.043 に答える
5

テンプレート コードをconst参照専用に記述し、コンパイラに依存して参照を最適化します。

于 2010-10-12T14:17:19.710 に答える