テンプレートはコードではありません。テンプレートは...よくテンプレートです。テンプレート関数を呼び出す前に、インスタンス化する必要があります。例えば。
これは単なるテンプレートにすぎません。つまり、これを単独で書くと、コンパイラはこれに対して1行のコードを作成しません。
int main() {
int x = 0;
int y = foo<int>(x); // compiler instantiates the template and calls the int instance
}
あなたの最初のスニペットでコンパイラは、テンプレートをインスタンス化するために使用する必要がありますどのような種類を知っていません:あなたはインスタンス化し、それを使用するときにのみ、コンパイラが何かを行います。さらに、main
をテンプレートにすることはできません。プログラムのエントリポイントはint main()
である必要があります。
PS:
誰もがちょうど関数のパラメータと何よりも内側のテンプレートを使用しているかのように思えます。
さらに多くのことがテンプレートで可能です。私は、テンプレートについて、と考えています。は、コンパイル時にパラメータを選択できるときはいつでも自分のコードをパラメータ化する方法を考えています。この(ビットわざとらしい)例考えてみましょう:インスタンス化されると
// template taking a functor as argument
// (more precisely: a default constructible callable type)
template <typename op,typename T> void plug(T x) {
std::cout << "op(" << x << ") = " << op()(x) << "\n";
}
// a simple functor
template <typename T>
struct identity { T operator()(T x){return x;} };
int main() {
plug<identity<double>,double>(2.0);
}
// prints:
// op(2) = 2
を、パラメータは、関数のパラメータとして表示されませんが、それはむしろ(テンプレート)関数は、実際にそのパラメータで何をしているかを制御します。
おそらく、あなたは 'typedef'を探していますか? – user694733
構文は最初のスニペットですが、テンプレートをインスタンス化する方法と時期はいつですか? 'Tmp'とは何でしょうか? – Quentin
「ピザ」にはどのようなタイプがありますか? – Galik