Итак, как передать указатель на метод с объектом в качестве контекста в качестве одного аргумента?
Используя только указатели на функции-члены, вы не можете. Хотя ваш синтаксис выглядит как нечто, что должно делать это, это просто запрещено. Вам нужен объект, чтобы применить функцию к:
class Other {
public:
int Next (pAdd funct, One & o, int c){ return (o.*funct) (c, 1);}
}
int main (){
One one;
Other other;
other.Next(&One::Add, one, 2);
}
Если вы хотите создать функциональный объект, который вызывает конкретную функцию-член определенного объекта, то одна из возможностей - использовать std::bind
(или boost::bind
, если вы еще не можете использовать C ++ 11):
#include <functional>
class Other {
public:
int Next (std::function<int(int,int)> funct, int c){ return funct (c, 1);}
};
int main (){
One one;
Other other;
using namespace std::placeholders;
other.Next(std::bind(&One::Add, &one, _1, _2), 2);
}
или лямбда:
other.Next([&](int a, int b){return one.Add(a,b);}, 2);