Witajcie.
Próbuje napisać sobie menadżer zasobów.
Założyłem już wcześniej temat - link: http://4programmers.net/Forum/C_i_C++/258265-menadzer_zasobow?p=1182790#id1182790
(Nowy wątek zakładam gdyż sadze że nie należy tamtego' odgrzewać')
Właściwie napisałem już ów menadżer - nawet działa ;) ale uznałem że jest zbyt skomplikowany, że można zrobić to prościej.
W związku z powyższym zacząłem od nowa.
Jestem przy tworzeniu kontenerów zasobów.
Miałem w planach coś tego:
Klasa CResourceContainerBase jest interfejsem i jest klasą abstrakcyjna
Udostępnia metodę getResource();
Klasa przechowująca teksturę CContainerTexture
dziedziczy po CResourceContainerBase,implementuje metodę getResource();
Przykładowe użycie (tak miało być):
CResourceContainerBase * m_ptr = newCContainerTexture("sciezkaDoPliku");
Jednak gdy to obmyślałem zapomniałem że metoda getResource musi coś zwracać
Dodałem wiec szablon do klasy bazowej:
template<class TypeStoredResource>
Ostatecznie mam coś takiego:
CResourceContainerBase:
template<class TypeStoredResource>
class CResourceContainerBase
{
public:
virtual TypeStoredResource * getResource()=0;
protected:
CResourceContainerBase(){};
virtual ~CResourceContainerBase(){};
};
CContainerTexture:
class CContainerTexture final
:public CResourceContainerBase<sf::Texture>
{
public:
CContainerTexture(std::string pathResFile);
~CContainerTexture();
sf::Texture * getResource() override;
private:
};
CContainerTexture::CContainerTexture(std::string pathResFile)
{
}
CContainerTexture::~CContainerTexture()
{
}
sf::Texture * CContainerTexture::getResource()
{
}
Jednak by tego użyć należy zrobić tak:
CResourceContainerBase<sf::Texture> * m_ptr = new CContainerTexture("sciezkaDoPliku");
I tu leży mój problem.
Chce wyeliminować potrzebę wpisywania:
<sf::Texture>///<---przy okazji: jak to się fachowo nazywa?
Tak by legalne było coś takiego:
CResourceContainerBase* m_ptr = new CContainerTexture("sciezkaDoPliku");
Czy ktoś ma pomysł jak to osiągnąć - jestem na początku pisania więc wszelkie zmiany wchodzą w grę.