私はゲーム フレームワークの抽象化を考え出そうとしています。1 つのアプローチは、たとえば、グラフィックスとオーディオ クラスを作成することです。これらはゲームで使用されるインターフェイスであり、ターゲット プラットフォーム用の特定の実装を派生させます (デスクトップ/モバイル/コンソール)。
ここにアイデアのサンプルコードがあります:
#include <iostream>
#include <string>
using namespace std;
struct Graphics
{
virtual ~Graphics() {}
virtual void Rect() {}
};
struct Text
{
virtual ~Text() {}
virtual void Print(string s) {}
};
struct IosGraphics : public Graphics
{
void Rect() { cout << "[]"; }
};
struct IosText : public Text
{
void Print(string s) { cout << s << endl; }
};
struct Output : public Graphics, public Text
{
};
struct IosOutput : public Output, public IosGraphics, public IosText
{
};
int main()
{
Output * output = new IosOutput();
output->Rect(); // this calling Graphics::Rect not IosGraphics::Rect
output->Print("Hello World!"); // this calling Text::Print not IosText::Print
cin.get();
}
問題は、出力が IosText::Print の代わりに Text::Print を使用していることです。これはひし形の問題に関連しているのでしょうか。仮想継承などを使用する必要があるかもしれません。どんな助けでも大歓迎です。