模板

模板是C++中实现泛型编程的核心机制,它允许编写独立于具体数据类型的代码,增强代码复用性。这篇笔记我们对C++中的函数模板和类模板进行简单介绍。

函数模板

下面例子代码我们编写了一个函数模板,它实现了支持泛型的两个元素相加功能。

#include <iostream>
#include <string>

template <typename T> T add(T a, T b) { return a + b; }

int main() {

  double sum = add(1.0, 2.2);
  std::cout << "Sum: " << sum << std::endl;
  std::string str1 = "Hello ";
  std::string str2 = "world";
  std::string cat = add(str1, str2);
  std::cout << "Concatenated: " << cat << std::endl;
  return 0;
}

模板使用template关键字定义,<typename T>表示模板使用的一个类型是T,这里的T不是实际类型而是一个类型参数,类型参数可以在函数的参数、返回值和函数体中使用。调用函数模板时,编译器会根据实参自动推导模板类型参数,我们也可以手动明确指定。

double sum = add<double>(1.0, 2.2);

类模板

类模板与函数模板类似,类中的成员数据类型可以使用模板参数指定。

#include <iostream>
#include <string>

template <typename T> class Demo {
public:
  T value;
  Demo(T value) : value(value) {}
  T getValue() { return value; }
};

int main() {
  Demo<std::string> demo("Hello");
  std::cout << demo.getValue() << std::endl;
  return 0;
}

类模板中,我们不能自动推导类型,类型参数需要明确指定。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap