请参阅模板模式(使用具有可在派生类中配置的纯虚函数的抽象基类)。
http://en.wikipedia.org/wiki/Template_pattern
如果您更喜欢更可控(和更少面向对象)的方式,则游戏部分应在应用程序部分调用可配置的回调函数,以执行特定于平台的配置。
例如:
// in Application:
static void SetWindowHandle(GameEngine const& p_game_engine, void* p_callback_data)
{
p_game_engine.DoSomethingWithHandle(static_cast<ApplicationManager*>(p_callback_data)->GetHWND());
}
void Initialize() {
this->m_game_engine.Initialize(this, &Application::SetWindowHandle);
}
// ...
// in Game Engine:
// ...
typedef void (*TSetWindowsHandleCallback)(GameEngine const*, void*);
void* m_application_data;
TSetWindowsHandleCallback m_windows_handle_callback;
void Initialize(void *p_application_data, TSetWindowsHandleCallback p_callback)
{
this->m_application_data = p_application_data;
this->m_windows_handle_callback = p_callback;
}
void SetWindowsHandle()
{
this->m_windows_handle_callback(*this, m_application_data);
}