c ++回调 - 编译虚拟函数的替代方法

Sim*_*ott 3 c++ design-patterns

我希望一个通用的可重用类能够执行回调.我通常使用虚函数来执行此操作:

通用类:

class LibraryClass
{
private:
    virtual void SomeCallback(){}
};
Run Code Online (Sandbox Code Playgroud)

使用泛型类的代码:

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();
}
Run Code Online (Sandbox Code Playgroud)

这似乎是一个非常多的样板,只是为了连接一个回调.另一种方法是使用仿函数,它可能更清洁一些.

但在我看来,在编译时已经知道了很多.这可以简化,以便在编译时解决回调吗?

Alo*_*ave 5

您可以使用奇怪的重复模板模式(CRTP)来实现静态多态.