【C++知识点总结全系列 (07)】:模板与泛型编程详细总结与分析

1、概述

(1)What(什么是模板、泛型编程)

模板:

模板分为函数模板和类模板,其类内部的类型和函数的形参类型不具体指定,用一个 虚拟的类型来代表,在具体使用的时候在具体化

泛型编程:

以一种独立于任何特定类型的方式编写代码,模板是泛型编程的基础

(2)Why

实现代码的重用

(3)Which

  • 模板函数
  • 模板类

(4)模板参数

A.What

模板参数是在 C++ 模板中使用的类型或非类型实体的占位符,分为类型模板参数和非 类型模板参数

B.How

template <typename T> T calc(const T&, const T&); //模板的声明

注意:通常一个文件所有模板的声明放在文件的开始位置

C.模板参数的类型成员

  • T::value_type():必须显式地告诉编译器该名字是一个类型,且只能使用关键字 typename(而非 class)

D.默认模板参数

与函数默认实参一样,对于一个模板参数,只有当它的右侧都有默认参时,它才可以有默认参数

在这里插入图片描述

2、模板函数

#include <sstream>
using namespace std; 
template <class T>//T 是类型模板参数
string tTostring(T t)
{
   
   
	std::ostringstream osstream; 
	osstream << t;
	return osstream.str(); 
}

template <typename T, typename U>//模板参数列表 
auto add(T t, U u){
   
   
	if constexpr (std::is_same<T, std::string>::value)
		return t + tTostring(u);
	if constexpr (std::is_same<U, std::string>::value)
		return tTostring(t) + u;
	if constexpr (std::is_arithmetic<T>::value && std::is_arithmetic<U>::value)
		return t + u;
}

3、模板类

(1)How(如何定义和使用模板类)

template <class T> 
class Blob {
   
   
public: 
typedef typename std::vector<T>::size_type size_type;
private:
std::vector<T> *data_; void check(size_type i, const std::string &msg) const; public:
Blob(){
   
    data_ = new std::vector<T>();} 
Blob(std::initializer_list<T> il)
{
   
    
data_ = new std::vector<T>(il); 
} 
Blob(const Blob &blob) {
   
   //在一个类模板作用域内,可直接使用模板名,而不必指定模板参数
data_ = new std::vector<T>(*blob.getData());
// 也可 blob.data_,在类的成员函数内部,可直接访问同类的其他对象私有成员 }
~Blob()
{
   
    
delete data_;
}
std::vector<T>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值