提示信息

C++模板初阶知识

过往幸福 已关注

C++模板是一种强大的工具,使你能够编写可以处理任意数据类型的通用代码。模板主要有两种形式:函数模板和类模板。下面是一些初阶知识,帮助你理解如何使用C++模板。

1. 函数模板

函数模板允许你定义一个函数,而不必指定确切的数据类型。它可以用于多个数据类型的函数调用。

示例:

  1. #include <iostream>
  2. using namespace std;
  3. // 定义一个简单的函数模板,用于返回较大的值
  4. template <typename T>
  5. T getMax(T a, T b) {
  6. return (a > b) ? a : b;
  7. }
  8. int main() {
  9. cout << getMax(10, 20) << endl; // 调用 int 类型的模板
  10. cout << getMax(34.5, 28.9) << endl; // 调用 double 类型的模板
  11. cout << getMax('a', 'b') << endl; // 调用 char 类型的模板
  12. return 0;
  13. }

2. 类模板

类模板允许你创建一个模板化的类或结构,这样就可以使用单个类或结构来处理多种数据类型的对象。

示例:

  1. #include <iostream>
  2. using namespace std;
  3. // 定义一个简单的类模板,用于存储一个数值
  4. template <typename T>
  5. class Storage {
  6. private:
  7. T value;
  8. public:
  9. Storage(T v) : value(v) {}
  10. T getValue() { return value; }
  11. };
  12. int main() {
  13. Storage<int> intStorage(123);
  14. Storage<double> doubleStorage(456.78);
  15. cout << intStorage.getValue() << endl; // 使用 int 类型的 Storage
  16. cout << doubleStorage.getValue() << endl; // 使用 double 类型的 Storage
  17. return 0;
  18. }

3. 模板参数

模板参数可以不仅限于类型,还可以是非类型参数,比如整数。

示例:

  1. #include <iostream>
  2. using namespace std;
  3. // 非类型模板参数
  4. template <typename T, int size>
  5. class Array {
  6. private:
  7. T arr[size];
  8. public:
  9. void printSize() { cout << "Size of array: " << size << endl; }
  10. };
  11. int main() {
  12. Array<int, 10> intArray;
  13. intArray.printSize(); // 打印数组的大小
  14. return 0;
  15. }

4. 模板特化

有时候你需要为特定的类型提供不同的实现,这就是模板特化的用途。

示例:

  1. #include <iostream>
  2. using namespace std;
  3. template <typename T>
  4. class Printer {
  5. public:
  6. static void print(T value) {
  7. cout << value << endl;
  8. }
  9. };
  10. // 对 char* 类型进行特化
  11. template <>
  12. class Printer<char*> {
  13. public:
  14. static void print(char* value) {
  15. cout << "String: " << value << endl;
  16. }
  17. };
  18. int main() {
  19. Printer<int>::print(123);
  20. Printer<double>::print(45.67);
  21. Printer<char*>::print("Hello, World!");
  22. return 0;
  23. }

通过掌握这些基本概念,你可以利用C++模板来编写更加灵活和可复用的代码。模板是C++中的高级特性,进一步的学习还可以深入研究模板元编程等高阶主题。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
过往幸福 关注 已关注

最近一次登录:2024-11-20 18:01:11   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图