具有多种返回类型的类?

时间:2010-11-05 20:14:44

标签: c++

我正在制作游戏gui api。它适用于Allegro和SDL。我使用多态性进行输入和位图绘制。问题来自于这三种类型:位图,字体和颜色。 SDL和Allegro在这些方面有所不同。问题是由于返回类型不同,我不能在这里使用多态。我觉得将void *作为返回类型是不对的。我该怎么办才能让用户做到:

AGBitmap bmp = AGBitmap("someimage.png");
graphics->draw(bmp);

现在我的AGBitmap只与Allegro配合使用,并且有一个重载=运算符并管理其内存,因此用户无需这样做。

我该怎么办?

由于

3 个答案:

答案 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的应用程序。