我希望通用可重用的类能够执行回调。我通常使用虚函数来做到这一点:
通用类:
class LibraryClass
{
private:
virtual void SomeCallback(){}
};
使用通用类的代码:
class AppClass;
class LibraryClassWrapper: public LibraryClass
{
public:
LibraryClassWrapper(AppClass& appClass):appClass_(appClass){}
private:
virtual void SomeCallback();
AppClass& appClass_;
};
class AppClass
{
public:
AppClass():libraryClassWrapper_(*this){}
void handleCallbackFromLibraryClass()
{
std::cout << "Handling callback" << std::endl;
}
private:
LibraryClassWrapper libraryClassWrapper_;
};
void LibraryClassWrapper::SomeCallback()
{
appClass_.handleCallbackFromLibraryClass();
}
看起来似乎很简单,只是为了建立回调。替代方法是使用仿函数,这可能会更清洁一些。
但是在我看来,在编译时知道的很多东西。可以简化一下以便在编译时解决回调吗?
最佳答案
您可以使用 Curiously recurring template pattern(CRTP) 来实现静态多态性。