boost:bind原理
2011-04-02 00:11
344 查看
废话不多说,贴上代码,简单拙劣模仿。
一、指向函数的指针
语法:数据类型 (*函数指针名)(形参表);
二、获取并调用类的成员方法
三、模板化
四、泛化
参考Boost::Any的实现,把类的成员方法和对象保存起来。
一、指向函数的指针
语法:数据类型 (*函数指针名)(形参表);
void run(){ cout<<"run"<<endl; } void(*p)() = run; p();[/code]
二、获取并调用类的成员方法
class Foo { public: void run(){ cout<<"Foo run;"<<endl; } }; void (Foo::*p)() = &Foo::run; Foo foo; (foo.*p)();[/code]
三、模板化
template <class T>void call(void(T::*p)(),T t) { (t.*p)(); } Foo foo; call(&Foo::run,foo);[/code]
四、泛化
参考Boost::Any的实现,把类的成员方法和对象保存起来。
class PlaceHolder{ public: virtual void run() = 0; }; template<typename T> class Holder:public PlaceHolder { public: Holder(void(T::*method)(),T obj):method(method),obj(obj){} virtual void run(){ (obj.*method)(); } private: T obj; void(T::*method)(); }; class Function { public: template<typename T> Function(void(T::*method)(),T obj) { this->method = new Holder<T>(method,obj); } void operator ()(){ method->run(); } PlaceHolder *method; }; Function f(&Foo::run,foo); f();[/code]
相关文章推荐
- boost::bind实现原理学习
- boost::bind和占位符实现的原理(from AV BOOST)
- 一个类里可以注册不同类型的消息及boost:function和boost:bind的使用
- boost::bind 详解及常见问题
- Boost.Bind语法一致性的体现
- VS 2005环境下使用boost ::bind的一个注意事项
- mysql绑定参数bind_param原理以及防SQL注入
- boost基础——variant的原理及基本用法
- boost 库 enable_shared_from_this 实现原理分析
- boost::bind boost::function绑定万能函数测试2(类成员函数和虚函数)
- boost::intrusive_ptr原理介绍
- boost.bind 如何 bind
- boost.bind 如何 bind continue.1
- adaboost原理和example
- boost::bind III
- boost综合使用<function,bind,thread,mutex,condition_variable,shared_ptr>
- boost中模板函数addressof()实现原理
- 机器学习(20)之Adaboost算法原理小结
- std::for_each && boost bind memer function
- boost中bind、thread、io_services测试