Home >Backend Development >C++ >Instantiation and generation of C++ function templates

Instantiation and generation of C++ function templates

PHPz
PHPzOriginal
2024-04-14 10:21:02613browse

Function template instantiation allows type-specific function implementations to be generated for different types when called. The compiler performs instantiation automatically, but it can also be generated explicitly. Function templates provide the ability to compare objects of different types, such as comparing ints and strings.

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

Instantiation and Generation of C Function Templates

Function templates are a powerful C feature that allow you to create Methods for different types of parameterization. When you call a function template of a specific type, the compiler generates a function instance specific to that type.

Instantiation

The C compiler automatically performs function template instantiation when needed. When you use a function template instance of a specific type, the compiler generates a new, type-specific version. For example, the following code demonstrates how to instantiate a std::max template:

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

Explicit generation

In some cases, you may need to explicitly generate a function Template instance, this can be done by using the keyword 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 类型
}

Practical case

The following is a practical case using function template, which implements The ability to compare objects of different types:

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 类型
}

In the above example, the compare function template is designed to receive arbitrary types and compare them to determine which value is smaller. When this function is called, the compiler generates an appropriate instantiation for the supplied type.

The above is the detailed content of Instantiation and generation of C++ function templates. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn