値またはrefによるテンプレートパラメータを持つ関数テンプレートがある場合
template<class T> void DoSomething(T& t){ t.method();}
ポインターまたはスマートポインターを処理したい場合は、最初に逆参照するのが最善であるため、コードが機能するか、次のような委任関数を記述します
template<class T> void DoSomething(T* t){ Dosomething(*t);}
値またはrefによるテンプレートパラメータを持つ関数テンプレートがある場合
template<class T> void DoSomething(T& t){ t.method();}
ポインターまたはスマートポインターを処理したい場合は、最初に逆参照するのが最善であるため、コードが機能するか、次のような委任関数を記述します
template<class T> void DoSomething(T* t){ Dosomething(*t);}
これはプロジェクトによって異なります。私としては、最初のバリアントを使用します。いくつかの理由を次に示します。
すべての「それが最善か」という質問と同様に、答えは「場合による」です。議論と意見が交わされます。
ただし、2 番目の方法を使用することをお勧めします。その理由は、関数の 2 番目の形式で追加のチェックを追加できるからです。例えば:
template<class T> void DoSomething(T* t)
{
if (t == NULL)
give_error_somewhere();
else
Dosomething(*t);
}
しかし、私が言ったように、それは間違いなくあなたのプロジェクト全体に依存します.