C++中如何将 template 模板类(模板函数)的 声明和定义分别写在两个文件中.

本文探讨了在C++中如何将模板类的声明与定义分开写在两个文件中,以解决编译问题。通过举例说明模板并非数据类型,而是生成函数或类的蓝图。当提供库时,若头文件包含模板函数,编译器无法确定具体类型,导致编译错误。文章提出了两种解决方案:一是将模板定义移到头文件,但这暴露了实现细节;二是预实例化模板,但可能导致库体积增大。更多模板相关问题可参考FAQ链接。
摘要由CSDN通过智能技术生成

我们正常使用模板的时候都是将声明和定义放在一起.

  • 这里要注意的是 模板不是一种数据类型! 他既不是函数也不是类,他是生成这两者的 “模板”!这个概念可能有点绕, 举例来说: 我有一张
    设计图(template), 这个设计图是用来制作板凳的.
    那么光有这张设计图,我是没法使用的.我需要有材料,或者说指定用什么材料去做板凳,比如我要用木头或者用塑料之类的.当我有了这些材料之后,再按照图纸去制作出了板凳才能真正被使用.
  • 到这里再说说编译器对于模板的处理. 编译器看到模板之后,就比如是一名木匠看到了图纸,光看到图纸的话 木匠是什么都做不了的.他只能等到别人要求他制作板凳,并且告诉他需要用什么材料去做,才会真的动手去生产出一个板凳.

下面看一个实际的例子:
你现在要为别人提供一个库, 那么常用的做法是

  1. 写一个头文件,将函数定义放在这里.
  2. 写一个源文件 包含头文件,将实现放在这里. 因为你并不想要别人知道怎么实现的,只要知道怎么用就行了.
  3. 将他编译成 静态库或者动态库 提供给别人使用.

但是现在问题来了,头文件里有一个 模板函数!
类似如下:

//foo.h
#pragma once
template <class T>
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值