我有一个回调类,在整个应用程序的某些地方使用。它是这样构造的:
struct A {
void f();
}
A * callee = new A;
Callback_0 callback = CCallback_0(callee, &A::f);
callback
现在可以存储和稍后调用。这样做的问题是,如果callee
在回调创建和回调调用之间被破坏,程序就会崩溃(或更糟)。
到目前为止我能想到的唯一解决方案:任何想要成为被调用者的类都必须从基Callee
类继承:
class Callee {
public:
void registerCallback(const Callback& c) {
_callbacks.push_back(c);
}
~Callee() {
std::for_each(_callbacks.begin(), _callbacks.end(), [](Callback& c){c.disable();});
}
private:
std::vector<Callback> _callbacks;
}
这种设计的缺点是我必须继承每个可能需要调用的类。有没有更好的办法?我更喜欢 C++03 解决方案,我只有有限的 C++11 支持(受 MSVC2010 和 Mac 上的 clang 限制)。