c++实现Callback机制
来源:互联网 发布:淘宝 买家秀图 编辑:程序博客网 时间:2024/06/07 05:41
c++实现Callback机制
Callback是这样的一类对象(在这里不能简单的理解为"回调函数"了):你注册一个函数,以及调用它时的参数,希望在满足某个条件时,以这些注册的函数调用这个回调,完成指定的操作。
Callback的出现,本质上是因为很多操作都有异步化的需要---你不知道它什么时候会执行,只需要告诉它,在执行的时候,调用我告诉你的操作即可.尽管使用的地方不尽相同,但是从程序的角度上看,做的事情都是差不多的。
要实现一个Callback,最大的难点在于,变化的参数和需要统一的对外接口之间的矛盾.也就是说,回调函数执行时参数的数量是你无法预知的.而你需要对外提供一个统一的接口,调用该接口的不需要关注到注册进去的到底是什么,有几个参数,具体的执行留到回调真正执行的时候再去处理。
下面给出一段程序加以理解:
#include <stdio.h>class Closure{public:virtual ~Closure(){}virtual void Run(){}protected:Closure(){} //构造函数是protected,只能被子类调用};template<class T>class Callback0 : public Closure{public:typedef void (T::*Done)();public:Callback0(T *obj, Done run) : object_(obj), run_(run){}virtual void Run(){(object_->*run_)();}private:T *object_;Done run_;};template<class T, class T1> class Callback1 : public Closure { public: typedef void (T::*Done)(T1); public: Callback1(T *obj, Done run, T1 arg) : object_(obj) , run_(run) , arg0_(arg) { } virtual void Run() { (object_->*run_)(arg0_); } private: T *object_; Done run_; T1 arg0_; };class Test { public: void Run0() { printf("in Test::Run0/n"); } void Run1(int i) { printf("in Test::Run1/n"); } };template<class T>Closure* NewCallback(T *obj, void (T::*member)()){return new Callback0<T>(obj, member);}template<class T, class T1>Closure* NewCallback(T *obj, void (T::*member)(T1), T1 P){return new Callback1<T>(obj, member, P);}int main(){Test test;Closure *closure0 = NewCallback(&test, &Test::Run0);callback0->Run();delete callback0;Closure *calback1 = NewCallback(&test, &Test::Run1, 1);callback1->Run();delete callback1;return 0;}
参考资料: http://qiusuoge.com/9890.html
0 0
- callback 实现机制
- c++实现Callback机制
- C#,CallBack实现进度条演示
- 一个关于CallBack机制的实例(C#)
- C/C++中的callback机制理解
- ASP.NET中的callback实现机制总结
- Callback机制_实现(2)
- CALLBACK机制:
- CallBack机制
- callback机制
- CallBack机制
- callback机制
- CallBack机制
- callback机制
- Callback在C/C++中的实现
- Callback在C\C++中的实现
- callback c
- Callback 实现
- 用WebCollector 2.x爬取新浪微博(无需手动获取cookie)
- 2015-01-02
- go reflect TypeOf 与ValueOf
- 文本格式不变存放在数据库
- UVA201 - Squares
- c++实现Callback机制
- Java基础----UDP
- h2database源码浅析:SQL语句的执行
- 变量类型 15-1-2
- python 和 c++ 之间发消息用json
- 《gdb调试之基础篇》
- MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系
- 学习->linux多线程网址
- iOS CoreData的基本使用