我希望通用可重用的类能够执行回调。我通常使用虚函数来做到这一点:

通用类:

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) 来实现静态多态性。

10-04 10:33