テンプレート関数を呼び出すときに、関数名の後に型を省略しても問題ありませんか?C++テンプレートでの引数の省略
例として、機能を考慮
テンプレート
<typename T
>ボイドF(TのVAR){...}。
は、それは単に、このようにそれを呼び出すために、OKです:
int型のx = 5;
f(x);
またはは、タイプを含めるとですか?
int x = 5; (x);
テンプレート関数を呼び出すときに、関数名の後に型を省略しても問題ありませんか?C++テンプレートでの引数の省略
例として、機能を考慮
テンプレート
<typename T
>ボイドF(TのVAR){...}。
は、それは単に、このようにそれを呼び出すために、OKです:
int型のx = 5;
f(x);
またはは、タイプを含めるとですか?
int x = 5; (x);
コンパイラが関数の引数からテンプレートの引数を推論できるときはいつでも、それらを残すことができます。これはコードを読みやすくするための良い習慣です。
また、あなただけではない始めや途中、最後のテンプレート引数を残すことができます:
template<typename T, typename U> void f(T t) {}
template<typename T, typename U> void g(U u) {}
int main() {
f<int>(5); // NOT LEGAL
f<int, int>(5); // LEGAL
g<int>(5); // LEGAL
g<int, int>(5); // LEGAL
return 0;
}
暗黙のテンプレートパラメータを使用して呼び出すときに問題はありません。コンパイラは混乱しているかどうかを知らせます。この場合、関数を呼び出すためのテンプレートパラメータを明示的に定義する必要があります。
あなたはそれを試してみて、何が起こるかを見ることができませんでしたか?テストするのに十分なほど簡単です。 –
@ Ed Swangren、「ちょうど試してみる」方法は非常に情報がない。せいぜい、特定のコンパイラが与えられた構文を可能にすることを伝えます。これは、言語標準に関する文の意味または正確さについては何も教えてくれません。 – Trent
私は質問を明確にすることができたと思います。トレントが親切に指摘したように、これがコンパイルされるかどうかはあまりありませんでした。私は舞台裏で何が起こっているのか不思議で、そこに良い情報を見つけるのは難しいです! – Chris