C++テンプレートを関数として使用する方法


  1. テンプレート関数の定義: テンプレート関数を定義するには、関数の前に「template」というキーワードを追加します。ここで、Tは任意の型を表します。例えば、以下のようなテンプレート関数を定義することができます。
template<typename T>
void PrintValue(T value) {
    std::cout << value << std::endl;
}

上記の例では、T型の引数を受け取り、その値をコンソールに出力する関数が定義されています。

  1. テンプレート関数の使用: テンプレート関数を使用するには、関数を呼び出す際に引数の型を指定する必要があります。以下は、テンプレート関数の使用例です。
int main() {
    PrintValue(5);  // int型の引数を渡す
    PrintValue(3.14);  // double型の引数を渡す
    PrintValue("Hello");  // const char*型の引数を渡す
    return 0;
}

上記の例では、PrintValue関数をint型、double型、const char*型の引数で呼び出しています。コンパイラは呼び出された引数の型に基づいて、適切な関数を生成します。

  1. テンプレート関数の特殊化: 場合によっては、特定の型に対して異なる動作をするテンプレート関数を定義したい場合があります。これを実現するために、テンプレート関数の特殊化を使用します。以下は、特定の型に対して特殊化されたテンプレート関数の例です。
template<>
void PrintValue<std::string>(std::string value) {
    std::cout << "String value: " << value << std::endl;
}

上記の例では、std::string型の引数に対して特殊化されたPrintValue関数が定義されています。この特殊化された関数は、std::string型の値を出力する際に追加の処理を行います。

これらは、C++テンプレートを関数として使用する基本的な方法です。テンプレートを活用することで、異なる型に対して柔軟に対応する関数を作成することができます。さらに、テンプレートメタプログラミングを使用することで、コンパイル時に高度な処理を行うことも可能です。