ホームページ  >  記事  >  バックエンド開発  >  C++ 関数テンプレートのインスタンス化と生成

C++ 関数テンプレートのインスタンス化と生成

PHPz
PHPzオリジナル
2024-04-14 10:21:02583ブラウズ

関数テンプレートのインスタンス化により、呼び出されたときに、型固有の関数実装をさまざまな型に対して生成できます。コンパイラはインスタンス化を自動的に実行しますが、明示的に生成することもできます。関数テンプレートは、int と string の比較など、さまざまな型のオブジェクトを比較する機能を提供します。

C++ 函数模板的实例化和生成

C 関数テンプレートのインスタンス化と生成

関数テンプレートは、さまざまな型のメソッドを作成できる強力な C 機能です。パラメータ化のこと。特定の型の関数テンプレートを呼び出すと、コンパイラはその型に固有の関数インスタンスを生成します。

インスタンス化

C コンパイラは、必要に応じて関数テンプレートのインスタンス化を自動的に実行します。特定の型の関数テンプレート インスタンスを使用すると、コンパイラーは新しい型固有のバージョンを生成します。たとえば、次のコードは、std::max テンプレートをインスタンス化する方法を示しています。

int main() {
  int a = 3;
  int b = 5;
  int max_value = std::max(a, b); // 实例化 std::max 模板以接受 int 类型
}

明示的な生成

場合によっては、関数を明示的に生成する必要がある場合があります。テンプレート インスタンス。これは、キーワード explicit を使用して実行できます。

template<typename T>
void print(T value) {
  std::cout << "Value is: " << value << std::endl;
}

int main() {
  explicit template void print<int>(10); // 显式生成 print 模板的 int 实例化
  print<double>(3.14); // 默认实例化 print 模板以接受 double 类型
}

実用的なケース

次は、関数テンプレートを使用した実際的なケースです。異なる型のオブジェクトを比較する機能を実装します。

template<typename T>
bool compare(const T& lhs, const T& rhs) {
  return lhs < rhs;
}

int main() {
  int a = 3;
  int b = 5;
  std::cout << std::boolalpha << compare(a, b) << std::endl; // 比较两个 int 类型

  std::string s1 = "Hello";
  std::string s2 = "World";
  std::cout << std::boolalpha << compare(s1, s2) << std::endl; // 比较两个 std::string 类型
}

上記の例では、compare 関数テンプレートは、任意の型を受け取り、それらを比較してどちらの値が小さいかを判断するように設計されています。この関数が呼び出されると、コンパイラは指定された型に適切なインスタンス化を生成します。

以上がC++ 関数テンプレートのインスタンス化と生成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。