I try to pass a function type as template parameter. It's the first time I do this, and I'm not really surprised that it isn't working.
#SelectExpand
1#pragma once
2
3#include <map>
4
5template <typename T, typename Dtor=void(T*)>
6class ResourceManager
7{
8 typedef typename std::map<T*, Dtor> Resources;
9 typedef typename Resources::iterator Iterator;
10
11private:
12 Resources resources;
13
14public:
15 ResourceManager();
16 ~ResourceManager();
17 void add_resource(T *resource, Dtor dtor);
18 void del_resource(T *resource);
19};
20
21template <typename T, typename Dtor>
22ResourceManager<T, Dtor>::ResourceManager() {};
23
24template <typename T, typename Dtor>
25void ResourceManager<T, Dtor>::add_resource(T *resource, Dtor dtor)
26{
27 resources[resource] = dtor;
28}
29
30template <typename T, typename Dtor>
31void ResourceManager<T, Dtor>::del_resource(T *resource)
32{
33 Iterator it = resources.find(resource);
34 if(it != resources.end())
35 {
36 (*it).second(resource);
37 resources.erase(it);
38 }
39}
40
41template <typename T, typename Dtor>
42ResourceManager<T, Dtor>::~ResourceManager()
43{
44 for(Iterator it = resources.begin(); it != resources.end(); it++)
45 (*it).second((*it).first);
46
47 resources.clear();
48}
error: field 'std::pair<_SDL_TimerID* const, SDL_bool ()(_SDL_TimerID*)>::second' invalidly declared function type
What's the right way to do it?
Thanks.
Martin
Edit:
Oh no.
. I missed the (*). Problem solved. But with boost::function it is any_type(any_type). How do they do this
?