2010-11-05 101 views
-1

我正在製作遊戲gui api。它將與Allegro和SDL一起工作。我使用多態性進行輸入和位圖繪製。問題出現在這三種類型中:位圖,字體和顏色。 SDL和Allegro在這些方面不同。問題是由於不同的返回類型,我不能在這裏真正使用多態。我不會覺得有一個void *作爲返回類型是正確的。我能做什麼,而不是讓用戶可以只執行:具有多種返回類型的類?

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

現在我AGBitmap工作只用快板和具有重載=操作和管理它的內存,因此用戶不必。

我該怎麼辦?

感謝

+4

StackOverflow上有很多問題。如果你想讓那些可以回答你的人找到它,你就必須在標題上做得更好。 – 2010-11-05 20:16:03

+5

你會認爲他知道3千點後更好 – Squirrelsama 2010-11-05 20:17:28

+0

函數返回的東西,而不是類。 – Qwertie 2010-11-05 20:35:31

回答

0

由於存在不同的類型,因此應該使用模板專業化。

template < typename WinManagerType > 
class AGBitmap; 

template<> 
class AGBitmap<AlegroWinType> 
{ 
public : 
    //... 
    AlegroBitmapType GetBitmap(); 
}; 

template<> 
class AGBitmap<SdlWinType> 
{ 
public : 
    //... 
    SdlBitmapType GetBitmap(); 
}; 

但是由於您的問題太模糊,可能會有更好的解決方案。

0

CRTP可能是在這種情況下非常有用,只要你可以抽象爲相關具體類到你的基類模板(S)的通用接口。

template <class BITMAP> class MyBitmap 
{ 
    // generic bitmap interface 
}; 

class MyAGBitmap : MyBitmap<AGBitmap> 
{ 
};