【发布时间】:2009-11-10 12:22:30
【问题描述】:
我尝试了各种设计方法来解决这个问题,但我似乎无法做到正确。
我需要公开一些静态函数以用作 C 库的回调函数。但是,我希望实际实现是非静态的,因此我可以使用虚函数并在基类中重用代码。如:
class Callbacks {
static void MyCallBack() { impl->MyCallBackImpl(); }
...
class CallbackImplBase {
virtual void MyCallBackImpl() = 0;
但是我尝试解决这个问题(单例,通过让回调包含在实现类中的组合等)我最终陷入了死胡同(impl 通常最终指向基类,而不是派生类)。
我想知道这是否可能,或者我是否坚持创建某种辅助函数而不是使用继承?
【问题讨论】:
-
添加更多代码。我还不能理解这个问题。
-
我不明白:为什么你的回调必须是静态的?另外,请注意,C lib 不会接受指向成员函数的指针(这与指向函数的指针不同),因为它不知道成员函数是什么。
-
@Julien:因为它们要从 C 中调用,因此不能成为成员函数......正如你自己所说的那样:)。
-
@Frank:我不知道你可以将一个指向静态成员的指针传递给需要指向非成员函数的指针......很高兴你回答了我!
-
将指针传递给静态成员函数来代替函数指针通常会起作用,但不能保证会起作用。请参阅此问题以了解如何正确执行此操作。基本上你需要使用一个非成员函数。 stackoverflow.com/questions/499153/…
标签: c++ design-patterns callback