リソースを簡単に管理するためのクラス(ResourceManager)を作ってみました。
そのために、C++11 でテンプレートを使用します。
これが私がすることです:
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();
}
要するに、T
ポインターがポインター (自動削除) である場合は、別の振る舞いをしようとします。
を使用しようとしましたがstd::enable_if
、それがどのように機能するのか、これが正しい方法なのかわかりませんでした。
誰かが私を助けることができれば...
コードはここにあります: https://github.com/Krozark/ResourceManager