Cerco di creare una classe per gestire facilmente le risorse (ResourceManager).abilitazione modello se è puntatore
Per questo uso il modello con C++ 11.
Ecco quello che faccio:
template<class K,class T>
class ResourceManager
{
public:
ResourceManager();
~ResourceManager();
/* code */
void clear();
private :
std::unordered_map<K,T> resource;
template <bool b>
void clear();
};
template<class K,class T>
void ResourceManager<K,T>::clear()
{
clear<std::is_pointer<T>::value>();
};
template<class K,class T>
template<bool b>
void ResourceManager<K,T>::clear<b>()
{
for(auto& x:resource)
delete x.second;
resource.clear();
}
template<class K,class T>
template<>
void ResourceManager<K,T>::clear<false>()
{
resource.clear();
}
Insomma, cerco di avere comportement diverso se T
è un puntatore (auto cancellazione).
Ho provato a utilizzare std::enable_if
, ma non ho capito come funzionava, e se questo è il modo giusto di prendere.
Se qualcuno mi potrebbe aiutare ...
codice può essere trovato qui: https://github.com/Krozark/ResourceManager
Questo è esattamente ciò che volevo fare. Grazie. – Krozark
@Krozark: Sono contento che mi abbia aiutato. Ho aggiunto un consiglio: considera l'utilizzo di wrapper RAII come puntatori intelligenti, quindi non ti interessa affatto la parte 'delete';) –
+1 bella soluzione, Andy. – WhozCraig