我正在尝试为游戏框架提出一个抽象,一种方法是创建,例如,图形和音频类,这些是游戏使用的接口,并且您为目标平台派生特定实现(桌面/移动/控制台)。
我在这里有一些想法的示例代码:
#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();
}
问题是输出使用的是 Text::Print 而不是 IosText::Print,我想知道这是否与菱形问题有关,我可能不得不使用虚拟继承或其他东西。任何帮助是极大的赞赏。