function+bind的理解
function模板类的构造函数,把对象与成员函数绑定,重载了(),利用对象调用成员函数
bind模板函数,把对象与成员函数绑定,返回function对象,成员函数传参代码链接点这里
#include <iostream>
//A类
struct A{
void f(){ std:: cout << "void A:: f()\n"; }
};
//B类
struct B{
void f(){ std:: cout << "void B:: f()\n"; }
};
//func模板类
template<typename T>
class func{
private:
T a;
void (T::*f)();
public:
func( const T &a, void(T::*f)() ):a(a),f(f) { } //参数为对象和成员函数指针的构造函数
void operator()(){ (a.*f)( ); /* T类型对象a使用T类型的成员函数 */ } //重载()
};
//bind_f模板函数// 返回func模板类对象
template<typename T>
func<T> bind_f(const T &a, void(T::*f)() ){
return func<T>(a, f ); //构造一个func对象
}
int main(int, char *[])
{
A a;
func<A> t1 = bind_f(a, &A::f ); //A类对象与A类的任一成员函数绑定//返回func类对象
t1();
/* B b;
func<B> t2 = bind_f(b, &B::f );
t2(); */
return 0;
};