Kaynakların kolayca yönetilmesi için bir sınıf oluşturmaya çalışıyorum (ResourceManager).şablonu etkinse, işaretçi
Bunun için şablonu C++ 11 ile kullanıyorum.
İşte böyle yapar: Kısacası
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();
}
, ben T
bir işaretçi (otomatik silme) ise farklı comportement sahip deneyin.
std::enable_if
'u kullanmayı denedim, ancak nasıl çalıştığını anlamadım ve bu doğru yol buysa.
birisi bana yardımcı olabilir Eğer
...Kod burada bulunabilir: https://github.com/Krozark/ResourceManager
Tam olarak yapmak istediğim şey budur. Teşekkür ederim. – Krozark
@Krozark: Yardım ettiğine sevindim. Bir tavsiye ekledim: akıllı işaretçiler gibi RAII sarmalayıcıları kullanmayı düşünün, böylece "delete" kısmına önem vermek zorunda değilsiniz;) –
+1 güzel çözüm, Andy. – WhozCraig