我目前正在编写游戏和渲染引擎之间的抽象层。不幸的是,我遇到了一个问题:我似乎无法将超类(抽象接口)转换为子类(具体引擎的实现)。以下是我的代码:
IInitationSettings.h
class IInitationSettings {};
OxygineInitiationSettings.h
#include "IInitiationSettings.h"
#include "core/oxygine.h"
class OxygineInitiationSettings : public IInitationSettings, public oxygine::core::init_desc {
public:
OxygineInitiationSettings(const char* title, bool vsync, bool fullscreen, int width, int height);
};
OxygineInitiationSettings.cpp
#include "OxygineInitiationSettings.h"
OxygineInitiationSettings::OxygineInitiationSettings(const char* title, bool vsync, bool fullscreen, int width, int height) : oxygine::core::init_desc() {
this->title = title;
this->vsync = vsync;
this->fullscreen = fullscreen;
this->w = width;
this->h = height;
}
抽象的初始化方法:
static void init(IInitiationSettings& initSettings);
void GraphicsFactory::init(IInitiationSettings& initSettings){
#ifdef USE_OXYGINE_RENDERING
OxygineInitiationSettings settings = initSettings; //Does not work
oxygine::core::init_desc desc = initSettings; // Does not work
oxygine::core::init((oxygine::core::init_desc)((OxygineInitiationSettings)initSettings)); //Does not work
#endif
}
我该如何将我的抽象接口转换为具体实现?我想添加一个新的newInitiationSettings方法,它将返回一个IInitiationSettings对象,我将把它传递给init方法,以便使代码更加简洁。 (我希望我的游戏内代码看起来像这样:)
GraphicsFactory::init(GraphicsFactory::newInitiationSettings(args));
有什么想法吗?