C++20学习笔记——函数模板template

文章介绍了如何使用C++的模板功能优化代码,通过模板实现函数重载,提高代码的复用性。示例展示了如何创建模板函数print以处理不同类型的参数,以及模板类Array的使用,强调了模板在编译时的类型推断和实例化特性。
摘要由CSDN通过智能技术生成

template 模板

观察以下代码:

void print(int a)
{
	std::cout << a << std::endl;
}

void print(double a)
{
	std::cout << a << std::endl;
}

void print(std::string a)
{
	std::cout << a << std::endl;
}

int main()
{
	print(2333);
	print(23.3);
	print("u got be kiding me!");

}

我们明显发现print()函数之间的差别只是传入的参数不同,但使用了三次重载来实现,这样的代码复用性低,被视为是垃圾代码,怎么优化呢?这时候我们引入template关键词来实现

template<typename T>
void print(T a)
{
	std::cout << a << std::endl;
}

int main()
{
	print(2333);
	print(23.3);
	print("u got be kiding me!");
}

以上操作实现了第一次编写代码的效果,所以我们可以理解为我们将a的类型变成了可变的量,让编译器自己去判断输入的数据属于什么类型。
并且在代码底层逻辑里,print函数并不是真正的函数,它只有在被调用时才会被创建出来以供使用。
当然,你也可以显式地表示函数的模板:

    print<int>(2333);

注:将template< typename T >的typename替换成class是等效的,但是这么做容易与类相混淆,故不推荐
这是关于模板使用的另一个例子:

template<int N>
class Array 
{
private:
	int m_Array[N];
public:
	int GetSize() const
	{
		return N;
	}
};

int main()
{
	Array<5> my_array;
	std::cout<<my_array.GetSize();  //输出:5
}

还可以这样:

template<typename T,int N>
class Array 
{
private:
	T m_Array[N];
public:
	int GetSize() const
	{
		return N;
	}
};

int main()
{
	Array < double , 5 > my_array;
}

这里的array实际上和C++标准库中提供的array十分相似.

最后,模板不需要深入了解并使用,因为不是所有人都对它有所了解,深入了解可能会导致和同事之间的知识不同步而造成的不必要的麻烦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值