我正在制作游戏gui api。它适用于Allegro和SDL。我使用多态性进行输入和位图绘制。问题来自于这三种类型:位图,字体和颜色。 SDL和Allegro在这些方面有所不同。问题是由于返回类型不同,我不能在这里使用多态。我觉得将void *作为返回类型是不对的。我该怎么办才能让用户做到:
AGBitmap bmp = AGBitmap("someimage.png");
graphics->draw(bmp);
现在我的AGBitmap只与Allegro配合使用,并且有一个重载=运算符并管理其内存,因此用户无需这样做。
我该怎么办?
由于
答案 0 :(得分:0)
CRTP在这种情况下可能很有用,前提是您可以将相关具体类的公共接口抽象到基类模板中。
template <class BITMAP> class MyBitmap
{
// generic bitmap interface
};
class MyAGBitmap : MyBitmap<AGBitmap>
{
};
答案 1 :(得分:0)
由于有不同的类型,您应该使用模板专业化。
template < typename WinManagerType >
class AGBitmap;
template<>
class AGBitmap< AlegroWinType >
{
public :
//...
AlegroBitmapType GetBitmap();
};
template<>
class AGBitmap< SdlWinType >
{
public :
//...
SdlBitmapType GetBitmap();
};
但由于你的问题太模糊,可能会有更好的解决方案。
答案 2 :(得分:0)
听起来像是Adapter Pattern的应用程序。