我目前在我的游戏和渲染引擎之间写了一个抽象层。不幸的是,我遇到了一个问题:我似乎无法将一个超类(抽象接口)转换为子类(具体引擎的实现)。这里是我的代码:无法将超类转换为子类
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;
}
抽象init方法:
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-Method,它将返回一个IInitiationSettings对象,我将传递给init方法,以便拥有一个干净的代码。 (我希望我的游戏中,代码如下所示:
GraphicsFactory::init(GraphicsFactory::newInitiationSettings(args));
)
任何想法?
不知道你在问什么。如何做[static_cast](http://en.cppreference.com/w/cpp/language/static_cast)或动态演员?如何避免需要施放? –
究竟是行不通的?你能提供一些错误消息吗? –
@AmiTavory Nah,我问为什么我不能将我的超类IInitationSettings投到我的子类OxygineInitationSettings – Fly