मैं संसाधनों को आसानी से प्रबंधित करने के लिए कक्षा बनाने का प्रयास करता हूं (संसाधन प्रबंधक)।टेम्पलेट सक्षम है अगर सूचक
इसके लिए मैं सी ++ 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
@ क्रोज़र्क: खुशी हुई यह मदद की। मैंने एक सलाह दी: स्मार्ट पॉइंटर्स जैसे आरएआईआई रैपर का उपयोग करने पर विचार करें, इसलिए आपको 'हटाएं' भाग की परवाह नहीं है;) –
+1 अच्छा समाधान, एंडी। – WhozCraig