仿函数与模板编程
【摘要】
本文讨论,模板函数或者模板类以函数指针为形参,以仿函数为实参的情形。
1,模板函数
示例:
#include<iostream>using namespace std; int fun(){ return 2;} class FUN{public: int operator()() { return ...
本文讨论,模板函数或者模板类以函数指针为形参,以仿函数为实参的情形。
1,模板函数
示例:
-
#include<iostream>
-
using namespace std;
-
-
int fun()
-
{
-
return 2;
-
}
-
-
class FUN
-
{
-
public:
-
int operator()()
-
{
-
return 3;
-
}
-
};
-
-
class FUN2
-
{
-
public:
-
int fun2()
-
{
-
return 3;
-
}
-
};
-
-
template <class A>
-
int f(A p)
-
{
-
return p();
-
}
-
-
int main()
-
{
-
cout << f(fun) << " " << f(FUN()) << " ";
-
//cout << f(FUN2()); 错误
-
//cout << f(FUN2().fun2()); 错误
-
return 0;
-
}
输出:
2 3
可以看出,当我们这样实现模板函数时,既可以传入普通函数指针,也可以传入仿函数类对象。
如果是普通类,无论传入对象还是成员函数都是错的。
2,模板类
如果是模板类,就只能传入仿函数类对象,不能传入普通函数。
示例:
-
#include<iostream>
-
using namespace std;
-
-
class FUN
-
{
-
public:
-
int operator()()
-
{
-
return 3;
-
}
-
};
-
-
template <class A>
-
class classf
-
{
-
public:
-
int f(A p)
-
{
-
return p();
-
}
-
};
-
-
int main()
-
{
-
cout << classf<FUN>().f(FUN());
-
return 0;
-
}
文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/nameofcsdn/article/details/104830897
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)