我目前在我的遊戲和渲染引擎之間寫了一個抽象層。不幸的是,我遇到了一個問題:我似乎無法將一個超類(抽象接口)轉換爲子類(具體引擎的實現)。這裏是我的代碼:無法將超類轉換爲子類
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