64,654
社区成员
发帖
与我相关
我的任务
分享
class Task
{
public:
virtual void Run() = 0;
};
template <class T, class M>
class Task0 : public Task
{
private:
weak_ptr<T> t; M m;
public:
Task0(T* _t, M _m) : t(_t), m(_m) {}
virtual void Run()
{
shared_ptr<T> p = t.lock();
if (p)
(p->*m)();
else
printf("task cancelled!")
}
};
template <class T, class M>
Task* Bind(T* t, M m)
{
return new Task0<T,M>(t, m);
}
class Hello
{
public:
void show(){ cout<<"hello"; }
};
shared_ptr<Hello> h(new Hello);
Task* t = Bind(h, &Hello::show);
大概是这个样子,你自己再测测吧