深圳市公司網(wǎng)站建設(shè)價格先做后付費(fèi)的代運(yùn)營
function+bind的理解
function模板類的構(gòu)造函數(shù),把對象與成員函數(shù)綁定,重載了(),利用對象調(diào)用成員函數(shù)
bind模板函數(shù),把對象與成員函數(shù)綁定,返回function對象,成員函數(shù)傳參代碼鏈接點這里
#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) { } //參數(shù)為對象和成員函數(shù)指針的構(gòu)造函數(shù)void operator()(){ (a.*f)( ); /* T類型對象a使用T類型的成員函數(shù) */ } //重載()
};//bind_f模板函數(shù)// 返回func模板類對象
template<typename T>
func<T> bind_f(const T &a, void(T::*f)() ){ return func<T>(a, f ); //構(gòu)造一個func對象
}int main(int, char *[])
{A a;func<A> t1 = bind_f(a, &A::f ); //A類對象與A類的任一成員函數(shù)綁定//返回func類對象t1();/* B b;func<B> t2 = bind_f(b, &B::f );t2(); */return 0;
};