使用应用程序类的优点是什么?

What are advantages of using application class?

本文关键字:是什么 应用程序      更新时间:2023-10-16

我见过很多c++代码使用类似这样的应用程序类:

class MyApplication : Application {
private:
    int privateVariable;
public:
    void run() {
        run...
    }
    ~MyApplication() {
        cleanup...
    }
}
int main() {
    MyApplication app;
    app.run();
}

代替:

int main() {
    int variable;
    run...
    cleanup...
}

使用应用程序类的优点是什么?我能想到的一个是,我不需要将每个变量作为函数参数传递(因此很容易提取函数)。还有其他优点或缺点吗?什么时候推荐这种款式?

我试着搜索这个,但是我找不到。如有任何建议,我将不胜感激。

至少有三件事。

  1. 可能有几个应用程序类,在像

    这样的层次结构中
    AbstractApplication
        GUIApplication
        ServerApplication
        ConsoleApplication
    

    在这里使用OOP和继承是很自然的,有很多共享代码,不需要关心应用程序对象的确切类型。共享代码通常是事件循环(在run方法中),因为这类应用程序通常是事件驱动的。

  2. 事件处理程序和其他回调可以通过在应用程序类中根据需要重写虚拟保护方法来轻松实现:

    class MyApplication : Application {
        // ...
    protected:
        void someEvent(Event *event) {
            if (event->type()==Application::InterestingEvent) {
                // Do something about it
            } else {
                // just pass the event to super class implementation
                Application::someEvent(event);
            }
        }
    }
    

    这里回调只需要定义一次,在Application对象的子类中,它就可以工作了。使用其他实现方法,框架开发人员可能需要保留一个单独的回调表(现在由对象的虚函数表负责),并且应用程序开发人员需要添加一个单独的回调注册。

  3. 清理是由RAII干净而确定地处理的。您不需要关心应用程序对象的确切类型,因为它自己知道,编译器会处理它。