c++ - template enable if is pointer -


i try make class manage resources (resourcemanager).

for use template c++11.

here's do:


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();  } 

in short, try have different comportement if t pointer (auto delete).

i tried use std::enable_if, did not understand how functioned, , if right way take.

if me...


code can found here: https://github.com/krozark/resourcemanager

you use solution based on overload , tag dispatching. clear() member function defined way:

void clear() {     do_clear(std::is_pointer<t>()); } 

and class template include 2 overloads of do_clear(), follows:

template<class k,class t> class resourcemanager {      // ...  private:      void do_clear(std::true_type);     void do_clear(std::false_type);  }; 

and here definition of 2 member functions:

template<class k, class t> void resourcemanager<k, t>::do_clear(std::true_type) {     for(auto& x:resource)     delete x.second;     resource.clear(); }  template<class k, class t> void resourcemanager<k, t>::do_clear(std::false_type) {     resource.clear(); } 

notice, however, have option of using smart pointers , other raii resource wrappers avoid calling delete explicitly on raw pointers.


Comments

Popular posts from this blog

jquery - How can I dynamically add a browser tab? -

node.js - Getting the socket id,user id pair of a logged in user(s) -

keyboard - C++ GetAsyncKeyState alternative -