boost::bind模仿程序

来源:互联网 发布:西门子plc解密软件 编辑:程序博客网 时间:2024/05/11 16:51

 

#include <iostream>#include <vector>#include <algorithm>#include <string>#include <functional>#include <numeric>//#include <boost/bind.hpp>namespace{class placeholder {};placeholder _1;}template <typename R,typename T, typename Arg>class simple_bind_t{public:typedef R (T::*fn)(Arg);simple_bind_t(fn f,const T& t):fn_(f),t_(t){}R operator()(Arg a){return (t_.*fn_)(a);}private:fn fn_;T t_;};template <typename R, typename T, typename Arg>simple_bind_t<R,T,Arg> simple_bind(   R (T::*fn)(Arg),   const T& t,   const placeholder&){std::cout << typeid(R).name() << std::endl<< typeid(T).name() << std::endl<< typeid(Arg).name() << std::endl;return simple_bind_t<R,T,Arg>(fn,t);}class Test{public:void do_stuff(const std::vector<int>& v){std::copy(v.begin(),v.end(),std::ostream_iterator<int>(std::cout," "));}};template <typename R,typename T,typename Arg>int my_mem_fun(R (T::*f)(Arg)){std::cout << typeid(R).name() << std::endl<< typeid(T).name() << std::endl<< typeid(Arg).name() << std::endl;return 1;}class Cla1{public:std::vector<int> fun1(float val){return std::vector<int>();}};int main(){Test t;std::vector<int> vec;vec.push_back(42);vec.push_back(55);vec.push_back(88);simple_bind(&Test::do_stuff,t,_1)(vec);my_mem_fun(&Cla1::fun1);}