前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >模板的一些语法问题

模板的一些语法问题

作者头像
zy010101
发布2020-04-08 16:52:16
3960
发布2020-04-08 16:52:16
举报
文章被收录于专栏:程序员程序员

模板无疑是非常复杂的,一个模板类。你把成员函数实现在类内,是比较简单的。当然,你也可以实现在类外。这时候你有两个选择,在同一个文件实现成员函数,在另一个.cpp里实现成员函数,头文件只包含函数声明。

当你写在同一个文件里的时候,只需要在函数实现的地方处处加上模板定义以及表明类是一个模板了即可。如下:

代码语言:javascript
复制
template<typename T>		//模板的作用范围是紧随其后的一个类或者函数
Parent<T>::Parent(T a)		//Parent<T>这里的<T>不能少,表明它是一个模板类。
{
	this->a = a;
}

这时候,在你的main.cpp里包含这个头文件,编译即可正常通过。

但是当你在头文件里写上函数声明,在.cpp文件里写上函数实现。这时候你在main.cpp包含头文件之后,进行编译,会发现一堆错误,说找不到函数。对于模板出现的地方,你应当包含.cpp文件,这样就能编译通过。

通常我们是把函数声明和函数定义写在同一个文件里,并把这个文件叫做.hpp文件。例如OpenCV的头文件。

代码语言:javascript
复制
#include<opencv2/opencv.hpp>
#include<opencv2/imgproc.hpp>
#include<opencv2/imgproc/imgproc.hpp>

一旦要使用模板,为了自己,也为了将来可能使用模板的人,我们一定要把它们写在同一个文件里。否则就可能造成各种各样的问题。

还有就是我们在模板类中尽量不要使用友元函数了,除非重载<<和>>运算符。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档