有哪些C++模板坑
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"有哪些C++模板坑",在日常操作中,相信很多人在有哪些C++模板坑问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"有哪些C++模板坑"的疑惑有所帮助!接
千家信息网最后更新 2026年11月02日有哪些C++模板坑
这篇文章主要介绍"有哪些C++模板坑",在日常操作中,相信很多人在有哪些C++模板坑问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"有哪些C++模板坑"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
问题复现
头文件声明:
// temp.h #ifndef _TEMP_H_ #define _TEMP_H_ #include#include template using Vec = std::vector ; #define PRINTFMT(x) std::cout << x << " "; template void TestTemp(const Vec &v, T target); #endif
头文件实现:
#include "temp.h" templatevoid TestTemp(const Vec &v, T target) { [=]() { for (auto elem : v) if (elem == target) PRINTFMT(elem); }(); }
报错:
undefined reference to....
问题描述:当在.h中声明了模板,.cpp中定义了模板,当main函数去进行模板实例化的时候,在声明处找不到对应的T类型,自然就出问题了。
1.第一种:同一文件
声明及定义都在.h文件中。
// temp.h #ifndef _TEMP_H_ #define _TEMP_H_ #include#include template using Vec = std::vector ; #define PRINTFMT(x) std::cout << x << " "; template void TestTemp(const Vec &v, T target) { [=]() { for (auto elem : v) if (elem == target) PRINTFMT(elem); }(); } #endif
2.第二种:分离开+引入头文件
采用头文件声明,cpp定义,要想起作用,得在使用处引入两者并且定义处得用特化版本。
例如:
头文件实现:
// Temp.cpp #include "temp.h" void TestTemp(const Vec&v, int target) { [=]() { for (auto elem : v) if (elem == target) PRINTFMT(elem); }(); } template void TestTemp(const Vec &v, T target) { [=]() { for (auto elem : v) if (elem == target) PRINTFMT(elem); }(); }
实现:
#include "temp.h" #include "temp.cpp" int main() { std::vector v{1,2,3}; int target = 2; TestTemp(v,target); return 0; } 3.在末尾引入cpp
只需要在.h头文件末尾引入cpp即可。
头文件只需要声明:
// temp.h #ifndef _TEMP_H_ #define _TEMP_H_ #include#include template using Vec = std::vector ; #define PRINTFMT(x) std::cout << x << " "; template void TestTemp(const Vec &v, T target); #include "temp.cpp" #endif
头文件定义即可:
// Temp.cpp #include "temp.h" templatevoid TestTemp(const Vec &v, T target) { [=]() { for (auto elem : v) if (elem == target) PRINTFMT(elem); }(); }
调用处正常调用:
#include "temp.h" int main() { std::vector v{1,2,3}; int target = 2; TestTemp(v,target); return 0; } 在一些开源项目中,这种方式比较常见,只不过这里的.cpp得改为.hpp。其余不变!
到此,关于"有哪些C++模板坑"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
文件
模板
C++
问题
学习
更多
末尾
帮助
实用
接下来
作用
函数
只不过
实例
常见
文章
方式
方法
时候
版本
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技卖菜
科技信息互联网
重庆互联网络科技
关于新基建和互联网科技
互联网 科技
北京互联网科技
西安互联网科技
碳银互联网科技
奇酷互联网络科技公司
互联网科技上市公司
大白互联网科技
互联网科技公司介绍
互联网金融科技委员会
青岛中康互联网医疗科技有限公司
深圳国际航运科技和互联网
中国互联网有什么科技含量
成都互联网科技公司100强
民营互联网公司国防科技
无锡工业互联网科技有限公司
互联网金融金融科技
咖啡网
互联网是不是新科技
碳银互联网科技有限公司
互联网 新科技
亿人帮互联网科技
科技伦理 互联网公司
青岛中康互联网医疗科技有限公司
济南华为互联网科技产业总部基地
宁夏科技产业互联网案例
上海乐五互联网科技有限公司