函数模板中的函数指针问题!
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这到底是怎么回事,请牛人详细解释下。 展开
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这到底是怎么回事,请牛人详细解释下。 展开
1个回答
展开全部
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());
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());
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询