www.gusucode.com > 一个简洁高效的C++委托库源码程序 > 一个简洁高效的C++委托库源码程序/code/example/F16.cpp
// F11.cpp : Defines the entry point for the console application. // Download by http://www.NewXing.com #include "stdafx.h" #include <iostream> #include <ctime> #include "qevent.h" int Test1(int i) { return i+100; } void mytest(int i) { std::cout << "mytest: " << i <<"\r\n"; } struct Hello { int operator()(int i) const { return i+200; } int Test1(int i) { return i+300; } }; int main(int argc, char* argv[]) { Hello h; int i; QLib::Event<int,int> ev1,ev2; //构造函数 QLib::Event<int,int> ev3(&Test1); QLib::Event<int,int> ev4((Hello()));//对于VC71需要使用 ev4((Hello()))的形式,对于VC60 ev4(Hello());即可 QLib::Event<int,int> ev5(&h,&Hello::Test1); //绑定普通函数,仿函数,成员函数 ev1.bind(&Test1); ev1.bind(Hello()); ev1.bind(&h,&Hello::Test1); //获得当前已绑定的函数个数 i = ev1.hasbind(&Test1); i = ev1.hasbind(Hello()); i = ev1.hasbind(&h,&Hello::Test1); ev3 = ev1; //解除与函数的绑定 ev1.unbind(&Test1); ev1.unbind(Hello()); ev1.unbind(&h,&Hello::Test1); //赋值运算 ev1.bind(&Test1); ev2 = ev1; ev2 = ev1[0]; ev2 = &Test1; ev2 = Hello(); ev2 = QLib::Event<int,int>(&h,&Hello::Test1); //+=运算符 ev2 += Hello(); ev2 += &Test1; ev2 += QLib::Event<int,int>(&h,&Hello::Test1); ev2 += ev1; ev2 += ev1[0]; //-=运算符 ev2 -= ev1; ev2 -= ev1[0]; ev2 -= Hello(); ev2 -= &Test1; ev2 -= QLib::Event<int,int>(&h,&Hello::Test1); //查看是否为空 bool b = ev2.empty(); //获得元素个数 i = ev1.size(); //获得参数个数 i = ev1.param; i = QLib::Event<int,int>::param; //清除所有 ev2.clear(); //测试函数调用 ev2 = ev3; ev2 += ev3; //函数调用 ev2(10); //去除重复元素 ev2.removesame(); //函数调用 for (int j = 0; j < ev2.size(); j++) { std::cout << ev2[j](10) << "\r\n"; } QLib::Event<void,int> e0; e0.bind(&mytest); e0(10000); return 0; }