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;
}