void f(int);
void f(std::string);
そしてf
と同じプロトタイプを持つ2つのオーバーロード関数g
のような2つのオーバーロードされた機能を持っていますが、f
への単純なラッパーである、ので、その実装はまったく同じです。
void g(int n) { f(n);}
void g(std::string n) { f(n); }
g
の実装を2回書くことを避ける方法はありますか?私は、これは
template<typename T> g(T n) { f(n);}
のようなテンプレートを経由してg
を宣言することによって行うことができます知っているが、私は私が正しい方法だ何さまよう
g<int>(2);
g<std::string>("42");
に似関数呼び出しのタイプを入力する必要がありますg
の実装を2回書くのを避けるために、各関数呼び出しで型名を明示的に書く必要はありませんか?
"しかし、関数に型を入力する必要があります"、いいえ、あなたは必要ありません。テンプレート引数の控除はそれを行います。 –