リソースを簡単に管理するクラスを作成しようとしました(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
ポインタ(自動削除)がある場合は、別のcomportementを持ってしてみてください。
私はstd::enable_if
を使用しようとしましたが、それがどのように機能しているか、そしてこれが正しい方法であるかどうかはわかりませんでした。
誰かが私を助けることができれば...
コードはここで見つけることができます:https://github.com/Krozark/ResourceManager
これはまさに私がやりたいことです。ありがとうございました。 – Krozark
@Krozark:喜んで助けました。私はアドバイスを追加しました:スマートポインタのようなRAIIラッパーの使用を検討するので、 'delete'部分はまったく気にする必要はありません;) –
+1の素晴らしい解決策、Andy。 – WhozCraig