快速学习C++中的模板

模板是一个让C++支持范型编程的重要功能,它本质上是一个万能变量适配器;vector,pair等都是使用模板实现的

模板是C++的一个强大特性,它允许您编写通用的代码来处理不同的数据类型。您可以有函数模板和类模板。

  1. 函数模板:

函数模板允许您创建一个函数,该函数可以处理多种数据类型的输入。

template <typename T>
T max(T a, T b) {
   
    return (a > b) ? a : b;
}

int main() {
   
    std::cout << max(3, 5) << std::endl;     // 对于int类型
    std::cout << max(4.5, 3.5) << std::endl; // 对于double类型
    return 0;
}

在上面的代码中,max函数的返回类型和其参数类型都是由模板参数T决定的。当你使用不同的数据类型调用max时,编译器会为每种数据类型生成一个版本的函数。

  1. 类模板:

类模板允许您定义一个能够处理多种数据类型的类。

template <typename T>
class Box {
   
private:
    T content;

public:
    Box(T content) : content(content) {
   }

    T getContent() const {
   
        return content;
    }
};

int main() {
   
    Box<int> intBox(42);
    Box<std::string> stringBox("Hello, World!");

    std::cout << intBox.getContent() << std::endl;
    std::cout << stringBox.getContent() << std::endl;
    return 0;
}

上述代码中的Box类有一个成员content,其类型由模板参数T决定。

  1. 模板参数:

您不仅可以使用类型作为模板参数,还可以使用非类型模板参数,例如整数。

template <typename T, int size>
class Array {
   
private:
    T data[size];

public:
    T& operator[](int index) {
   
        return data[index];
    }
};

int main() {
   
    Array<int, 5> myArray;
    myArray[0] = 10;
    std::cout << myArray[0] << std::endl;
    return 0;
}

上述代码定义了一个固定大小的数组类,其中size是非类型模板参数。

  1. 多个模板参数:

您可以为模板提供多个参数,只需用逗号分隔即可。

template <typename T, typename U>
class Pair {
   
private:
    T first;
    U second;

public:
    Pair(T first, U second) : first(first), second(second) {
   }

    T getFirst() const {
   
        return first;
    }

    U getSecond() const {
   
        return second;
    }
};

int main() {
   
    Pair<int, std::string> p(42, "Answer");
    std::cout << p.getFirst() << " : " << p.getSecond() << std::endl;
    return 0;
}

在使用模板时,请注意某些模板可能不适用于所有数据类型。当使用模板编程时,确保为所有可能的类型提供了正确的实现。

相关推荐

  1. 快速学习C++模板

    2023-12-17 00:42:01       37 阅读
  2. C++模板方法模式

    2023-12-17 00:42:01       5 阅读
  3. C++模板使用

    2023-12-17 00:42:01       36 阅读
  4. C++模板---下

    2023-12-17 00:42:01       9 阅读
  5. C++模板(初阶)

    2023-12-17 00:42:01       22 阅读
  6. C++可变参数模板省略号

    2023-12-17 00:42:01       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-17 00:42:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-17 00:42:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-17 00:42:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-17 00:42:01       20 阅读

热门阅读

  1. [笔记] wsl2 下使用 qemu/grub 模拟系统启动(多分区)

    2023-12-17 00:42:01       38 阅读
  2. 来聊聊CAS

    2023-12-17 00:42:01       40 阅读
  3. Linux 中定时任务

    2023-12-17 00:42:01       38 阅读
  4. C语言第五十二弹--模拟使用strncat

    2023-12-17 00:42:01       32 阅读
  5. log4j2配置文件log4j2.xml详解

    2023-12-17 00:42:01       34 阅读
  6. Android Spinner监听列表展开和收起状态

    2023-12-17 00:42:01       37 阅读
  7. C++ lambda表达式

    2023-12-17 00:42:01       37 阅读
  8. Unity利用ZXing库 生成和识别二维码

    2023-12-17 00:42:01       36 阅读