有关c++函数模版技术问题文档模版

在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
假设有如下代码:
#include &iostream&
#include &vector&
#include &string&
#include &algorithm&
template &typename T1&
void display(T1 x)
cout && x &&
template &typename T2&
void fun1(const string msg, const vector&T2& vec)
for_each(vec.begin(), vec.end(), display);
int main(int argc, char **argv)
string msg("Hello world");
vector&int&
vec.push_back(11);
vec.push_back(12);
vec.push_back(7);
fun1(msg, vec);
为什么这段代码会出错?用的是C++98的标准,编译器是g++
display函数不用模版函数的时候就可以编译通过:
void display(int x)
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
display() 需要显示的类型就是T2,改成下面的用g++编译就可以了。
template&typename T2&
void fun1(const string msg, const vector&T2& vec)
for_each(vec.begin(), vec.end(), display&T2&);
但是用clang 600.0.56 照样不能编译。定义fun1的时候直接报错:
candidate template ignored: couldn't infer template argument 'T'.
据说g++ 实现有错,我刚开始学,也不明白。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
给display添加类型标记就可以了
#include &iostream&
#include &vector&
#include &string&
#include &algorithm&
template &typename T1&
void display(T1 x)
cout && x &&
template &typename T2&
void fun1(const string msg, const vector&T2& vec)
for_each(vec.begin(), vec.end(), display&T2&);
int main(int argc, char **argv)
string msg("Hello world");
vector&int&
vec.push_back(11);
vec.push_back(12);
vec.push_back(7);
fun1&int&(msg, vec);
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
display是模板函数,在调用for_each的时候display还没有实例化,在for_each内部调用display的时候才会实例化display(这个时候会根据迭代器解引用返回的值来推导类型实例化),所以for_each这里是编译不过的
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。C++能不能在普通类中写函数模板?
[问题点数:20分,结帖人TwenteMaster]
C++能不能在普通类中写函数模板?
[问题点数:20分,结帖人TwenteMaster]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2014年10月 C/C++大版内专家分月排行榜第三2014年4月 C/C++大版内专家分月排行榜第三
2013年7月 C/C++大版内专家分月排行榜第一
2015年9月 C/C++大版内专家分月排行榜第二2013年6月 C/C++大版内专家分月排行榜第二
匿名用户不能发表回复!|C++函数模版的简单使用 - Alex_zhou - 博客园
随笔 - 12, 文章 - 0, 评论 - 1, 引用 - 0
模版算是C++的独有特性吧,也算是C++中比较难的地方,我平时开发的时候用的非常少,或者几乎没有用到,需要模版的地方是能看懂框架中相关的代码;
模版函数相对还是很简单的,引入模版的目的在于代码的重用;比如算法相似,但是由于数据类型不同,我们不得不把同样的一份代码拷贝两次,而仅仅是为了修改数据类型,那么在引入了函数模版之后,我们可以仅仅用一份代码而表示不同重载函数。
下面介绍一下最简单的函数模版的应用:
template &typename T&  //定义一个抽象的数据类型T
T myMax(T a, T b) {    //声明函数模板
  return a & b ? a :&
int main () {
  int &a = 2;
  int b = 3;
  std::cout&&myMax(a, b)&&std::  //动态生成函数 int myMax(int , int)
  float c = 2.0f;
  float d = 3.0f;
  std::cout&&myMax(c, d)&&std::  //动态生成函数 flota myMax(float, float)
代码在第一次调用myMax()函数时,其参数都是int型,则编译器推导模板参数T为int,编译器会以函数模板为样板,以实际类型int代替函数模板中的抽象类型T,自动为这个函数调用生成一个int类型的版本。C++函数模板详解_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C++函数模板详解
&&C++函数模板详细介绍
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢求助!c++,函数模版有关问题~_百度知道
求助!c++,函数模版有关问题~
template &typename T&
void mylinklist&T&::mydeldata(T x,int dr) //x为需要删除的数据值,dr为需要删除第dr个x
node&T& *q=first,*p=int k=n,j=0;
if(dr==-1)
while(p-&next!=NULL&&k--)
if(p-&data==x...
我有更好的答案
模板的特性就是在编译的时候不进行任何的错误检查,只有在实例化的时候才真正执行代码。所以错误只有在运行时才会体现了。
采纳率:58%
为您推荐:
其他类似问题
函数的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 tp5 模版调用系统函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信