Tengo un template que me ta volviendo loco (nooo)
Amo a ver... tengo este método:
cBackgrounds::~cBackgrounds()
{
// Close all textures and sprites
cReleaser* c_releaser = new cReleaser();
c_releaser->safeRelease(m_pTexBackground);
c_releaser->safeRelease(m_pSprite);
delete c_releaser;
}
Y el método safeRelease con su correspondiente Template es este:
template
inline void cReleaser::safeRelease(T& iface)
{
if(iface)
{
iface->Release();
iface = NULL;
}
}
Hay un par de errores del linker (porque hay 2 llamadas). Por ejemplo, el primer error dice:
Core error LNK2019: símbolo externo "public: void __thiscall cReleaser::safeRelease(struct ID3DXSprite * &)" (?safeRelease@cReleaser@@QAEXAAPAUID3DXSprite@@@Z) sin resolver al que se hace referencia en la función "public: __thiscall cBackgrounds::~cBackgrounds(void)" (??1cBackgrounds@@QAE@XZ)
No lo entiendo... está todo bien definido, los includes están bien.
Si el template lo pongo en la misma clase (cBackgrounds), no hay ningún problema de link...
¿Alguien sabría desvelar el misterio? :(
Quizá adivinar por qué falla sin ver el resto de ficheros es difícil... por cierto, ¿por qué no te basta usar una plantilla genérica, que no pertenezca a una clase concreta?
Algo como:
template <class T>
inline void SafeRelease( T& iface )
{
if(iface)
{
iface->Release();
iface = NULL;
}
};
Weno ya ta solucionado, entré al canal de IRC y Colson me tuvo ayudando.
Se ha de implementar el template en el mismo header, siempre y cuando se le llame desde otro fichero. Si se le llama desde el mismo, puede implementarse en el cpp de la clase que lo contiene.
Respecto a por qué usar una clase que lo contenga... weno, gustos... a mí me gusta más :D
Asias x la ayuda.