I would like to wrap member functions that conform to the type \'void (ClassType::Function)(ArgType)\' with a templated class. Later, I want to pass an instance of ClassType to
This is a poor re-implementation of ::std::mem_fn
+ ::std::bind
, which are C++11 constructs. Here is how you might do this using those:
#include
int main() {
Foo foo;
auto wrapper = ::std::bind(::std::mem_fn(&Foo::set), ::std::ref(foo), _1);
wrapper(5); // Calls foo.set(5)
}
But, of course, you want a C++03 solution. Using Boost can get you this in C++03. I also believe that something like this is possible in C++03 with TR1. You can tell if you have that by seeing if #include
works. If you have TR1 those show up in the ::std::tr1
namespace.
Now, there is one way in which it isn't. You've made the function pointer itself part of the type signature of the class. That's sort of an odd thing to do, but certainly possible as you already know. Being able to determine the ClassType
and ArgType
values at compile time is tricky though. You can do it with template function argument matching, but not usefully because C++03 doesn't have auto
.