C++模板函数使用模板函数作为参数时候发生C2896错误

来源:百度知道 编辑:UC知道 时间:2024/07/02 17:44:54
代码如下:
template<class parameter>
parameter pro1(parameter para)
{
return ++para;
}

template <class process,class parameter>
void pro2(process pro1,parameter para)
{
cout<<pro1(para);
}

void main()
{
int a=3;
pro2(pro1,a);
}
此时会发生C2896错误,但若改成这样就没错
int pro1(int para)
{
return ++para;
}
template <class process,class parameter>
void pro2(process pro1,parameter para)
{
cout<<pro1(para);
}

void main()
{
int a=3;
pro2(pro1,a);
}
但是这样pro1就不能当模板使用,效果大减,我用的是VS2005,请问怎么解决

呃,很简单啊,因为你没有实例化模板

pro2(pro1,a);
改成
pro2(pro1<int>,a);
就可以了。

还有,参数名字最好改个名字,这样比较直观
而且类型不定,用typename会比较好吧:
template <typename process, typename parameter>
void pro2(process tPro1, parameter para)
{
cout<<tPro1(para);
}