函数模板中的函数指针问题!

c++primer中讲道template<typenameType,bool(*Comp)(constType&,constType&)>constType&min(co... c++ primer中讲道

template < typename Type,
bool (*Comp)(const Type&, const Type&)>
const Type&
min( const Type *p, int size, Comp comp )
{
int minIndex = 0;
for ( int ix = 1; ix < size; ++ix )
if ( Comp( p[ ix ], p[ minIndex ] ))
minIndex = ix;
return p[ minIndex ];
}

问题:Comp是一个函数指针,为什么在函数参数中又Comp comp了呢(这样用是否语法错误),如果语法没有问题,那为什么在函数定义中只用到了Comp,而没有用到comp这到底是怎么回事,请牛人详细解释下。
展开
 我来答
qyxqyxqyxqy
2012-11-26 · 超过11用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:33.7万
展开全部
Comp是类型也是函数指针,下面的Comp,我确定不是大写,而是小写。
template < typename Type,
bool (*Comp)(const Type&, const Type&)>
const Type&
min( const Type *p, int size, Comp comp )
{
int minIndex = 0;
for ( int ix = 1; ix < size; ++ix )
if ( comp( p[ ix ], p[ minIndex ] ))//这里是小写。
minIndex = ix;
return p[ minIndex ];
}
函数指针是个函数的入口地址
比如函数int f(int,int);
f可以作为地址
int (*p)(int,int)=f;//这里p和f就是同一个函数了
其实上面可以不用这么写。
template < typename Type,typename Comp>//这样既可以容纳函数指针,又可以容纳仿函数对象
const Type&
min( const Type *p, int size, Comp comp )
{
int minIndex = 0;
for ( int ix = 1; ix < size; ++ix )
if ( comp( p[ ix ], p[ minIndex ] ))//这里是小写。
minIndex = ix;
return p[ minIndex ];
}
可以定义如下仿函数
struct mycomp{
template<typename T>
T const& operator()(T const & t1,T const & t2){
return (t1<t2?t1:t2);
}
};

这么使用min(p,n,mycomp());
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式