在C++中实现事件(委托)(三)

2014-11-24 08:18:48 · 作者: · 浏览: 2
)(first_type p1, second_type p2)
{
assert(_handler != nullptr);
if(_handler != nullptr) _handler(p1, p2);
}
handler_type _handler;
};
private:
std::vector _handlers;
};
最后谈一下在写这个代码中遇到的问题:
(1)不知道你能不能发现下面代码的问题, 我在写代码时就栽在这里了:
vector v;
int* p1 = new int(1);
v.push_back(p1);
int* p2 = new int(2);
v.push_back(p2);
//尝试删除所有值为p1的项
//由该代码想到=>v.erase(std::remove(v.begin(), v.end(), p1), v.end());
auto itr = remove(v.begin(), v.end(), p1);
for_each(itr, v.end(), [](int* p){delete p;});
v.erase(itr, v.end());
(2)我们想把cookei_type放到类里面去, 类似这样:
1 template
2 class CEvent
3 {
4 public:
5 typedef TR return_type;
6 typedef T1 first_type;
7 typedef T2 second_type;
8 typedef void* cookie_type;
可发现要这样使用:
Common::CEvent::cookie_type c1 = btn.OnClicked.AddHandler(&obj, &CMyClass::OnBtuttonClicked);
太不方便了, 不知道大家有没有好的方法。