#include <iostream>
#include <vector>
#include "boost/function.hpp"
typedef boost::function<void(int)> FuncType;
class SumFun
{
public:
void operator()(int i)
{
std::cout<<"Class sumFun..."<<i+200<<std::endl;
}
};
class Notify
{
private:
std::vector<FuncType> vec;
public:
template<class T>
void AddNotify(T func)
{
vec.push_back(FuncType(func));
}
template<class T>
void ChangeNotify(T a)
{
for(std::size_t i = 0; i < vec.size(); i++)
vec[i](a);
}
};
void Sum(int i)
{
std::cout<<"Sum..."<<i<<std::endl;
}
void Sum100(int i)
{
std::cout<<"Sum100..."<<i+100<<std::endl;
}
int main(int argc, char** argv) {
Notify nf;
nf.AddNotify(&Sum);
nf.AddNotify(&Sum100);
nf.AddNotify(SumFun());
nf.ChangeNotify(100);
}
boost::function 还可以绑定类成员函数
class SumFun
{
public:
void Sum(int i)
{
std::cout<<"Class sumFun..."<<i+200<<std::endl;
}
};
int main(int argc, char** argv) {
boost::function<void(SumFun, int)> fn;
fn = &SumFun::Sum;
fn(SumFun(), 100);
}
class SumFun
{
public:
void Sum(int i)
{
std::cout<<"Class sumFun..."<<i+200<<std::endl;
}
};
int main(int argc, char** argv) {
boost::function<void(void)> fn;
fn = boost::bind(&SumFun::Sum, SumFun(), 100);
fn();
}