高效实用C++委托库 下载地址 http://upload.programfan.com/upfile/200548160qevent.rar 一个简洁高效的C++委托库,支持普通函数,仿函数,类成员函数的委托库,以相同方式声明0-9个参数的任意委托 一 支持编译器和性能 支持VC6.0和VC7.1 性能与boost::function库相同。 利用[](...)调用单个函数委托性能稍好一些。 二 声明形式 目前支持0到9个参数 QLib::Event<void> ev0; //零个参数 QLib::Event<int,int> ev1; //一个参数 QLib::Event<void,int,int,int> ev3; //三个参数 三 构造函数 QLib::Event<int,int> ev2; QLib::Event<int,int> ev1(&Test1); QLib::Event<int,int> ev1((Hello())); //VC60可直接使用ev1(Hello())的形式,VC70要求ev1((Hello()))的形式 QLib::Event<int,int> ev1(&h,&Hello::Test1); QLib::Event<int,int> ev1(ev2); QLib::Event<int,int> ev1(ev2[0]); 四 函数绑定 支持普通函数,仿函数,类成员函数,相同类型委托和委托中的元素 ev1.bind(&Test1); ev1.bind(Hello()); ev1.bind(&h,&Hello::Test1); //兼容形式 ev1 += &Test1; ev1 += Hello(); ev1 += QLib::Event<int,int>(&h,&Hello::Test1); //支持相同类型委托 ev1 += ev2; ev1 += ev2[0]; 五 判断绑定的函数个数 i = ev1.hasbind(&Test1); i = ev1.hasbind(Hello()); i = ev1.hasbind(&h,&Hello::Test1); 六 函数解绑定 ev1.unbind(&Test1); ev1.unbind(Hello()); ev1.unbind(&h,&Hello::Test1); //兼容形式 ev1 -= &Test1; ev1 -= Hello(); ev1 -= QLib::Event<int,int>(&h,&Hello::Test1); //支持相同类型委托 ev1 -= ev2; ev1 -= ev2[0]; 七 判断是否相等 ev1 == ev2; ev1 != ev2[0]; //对于单个函数的委托 ev1 == &Tes1; ev1 == Hello(); ev1 == QLib::Event<int,int>(&h,&Hello::Test1); 八 去除重复元素 ev1.removesame(); 九 辅助函数 参数个数 int i = ev1.param; 是否为空 bool b = ev1.empty(); 元素个数 int size = ev1.size(); 交换 ev1.swap(ev2);
十 函数调用形式 //直接调用 ev1(10); //单个成员方式调用 for (int i = 0; i < ev1.size(); i++) { ev1[i](10); }

|