我见过很多使用类似这样的应用程序类的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...
}
使用应用程序类有什么好处?我能想到的一点是,我不需要将每个变量作为函数参数传递(因此很容易提取函数)。还有其他优点或缺点吗?什么时候推荐这种风格?
我试图搜索这个,但我不能。任何建议都会非常感激。
答案 0 :(得分:1)
至少有三件事。
在层次结构中可能有几个应用程序类,如
AbstractApplication
GUIApplication
ServerApplication
ConsoleApplication
在这里使用OOP和继承是很自然的,有很多共享代码,它们不需要关心应用程序对象的确切类型。共享代码通常是事件循环(在run方法中),因为这类应用程序通常是事件驱动的。
根据需要,可以通过覆盖应用程序类中的虚拟受保护方法轻松实现事件处理程序和其他回调:
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对象的子类中定义一次,它就可以正常工作。使用其他一些方法来实现这一点,框架开发人员可能需要保留一个单独的回调表(现在由对象的vtable处理),并且应用程序开发人员需要添加单独的回调注册。
RAII对清理进行了彻底和确定的处理。您不需要关心应用程序对象的确切类型,因为它本身就知道这一点,编译器负责处理它。