发布一个高效实用的C++委托库

类别:编程语言 点击:0 评论:0 推荐:

高效实用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);
}

本文地址:http://com.8s8s.com/it/it22491.htm