Application은 동작이 유사하기에 Framework를 어떤식으로 구현할지 고려해보자.
// Application Framework 제작자는 아래 코드를 제공해준다.
#include <iostream>
using namespace std;
class CWinApp; // 클래스 전방 선언.
CWinApp* g_app = 0;
class CWinApp
{
public;
CWinApp() { g_app = this; }
virtual bool InitInstance() { return false; }
virtual int ExitInstance() { return false; }
virtual int Run() { return 0; }
};
int main()
{
if( g_app->InitInstance() == true )
g_app->Run();
g_app->ExitInstance();
}
// App을 구현하는 사람은 아래를 구현한다.
class MyApp : public CWinApp
{
public:
virtual bool InitInstance()
{
cout << "inittialization" << endl;
return true;
}
};
// 아래를 선언하면 정상적으로 App이 동작한다
MyApp theApp;
Main을 부른건도 아니고 MyApp theApp;를 생성만 했을뿐인데 App이 실행이 되다니??
- main이 호출되기 전 전역변수가 먼저 호출
- 전역변수의 생성자를 호출하고 생성자가 없다면 기반클래스의 생성자가 호출됨
- main함수가 호출됨.
위 구조가 마치 Template Pattern 같지 않은가? -> 맞음