lundi 6 juillet 2020

Passing a member function pointer as an argument to a template method

I am trying to write a templated method that will accept a member function pointer as an argument.

Here is an example class, including my latest attempt to write said template method:

class MyClass
{
public:
   int myMethod() { return 1; }

   template<typename T> 
   T call(std::function<T(MyClass*)> m)
   {
      return m(this);
   }
};

My goal is to be able to do the following (or something very similar in syntax):

MyClass m;
auto result = m.call(&MyClass::myMethod);

So far with my attempt above, I can do:

MyClass m;
std::function<int(MyClass*)> f = &MyClass::myMethod;
auto result = m.call(f);

I was surprised I was not even able to wrap that into a single line. m.call(&MyClass::myMethod) this does not compile. Why?

I am sure there is a way to get the behaviour I want, so any help would be much appreciated!

Aucun commentaire:

Enregistrer un commentaire