Вы ищете std::mem_fun(&A::myfunc)
.
РЕДАКТИРОВАТЬ: Вы не можете использовать mem_fun
здесь вообще - никакая перегрузка mem_fun
не позволяет вам сделатьфункция-член с двумя аргументами в функторе.Вам нужно будет использовать что-то вроде boost::bind
/ std::tr1::bind
(если у вас TR1) / std::bind
(если у вас C ++ 0x) или вам придется написать свой собственный функтор.
Обратите внимание, что даже если бы mem_fun
смог выполнить такое связывание, std::bind2nd
потерпит неудачу, потому что bind2nd
ожидает, что функтор получит два аргумента и будет привязывать указатель на функцию-член, как этосоздайте функтор с тремя аргументами.
У вас есть несколько способов обойти это:
- Напишите свой собственный функтор, который делает то, что вы хотите.
- Напишите явный циклвместо
std::for_each
. - Одна из еще не стандартных функций связывания, которые я упоминал выше (и продемонстрировал в ответе Дэвида)
- Не беспокойтесь о виртуальной функции в первойplace - заставляет ваш метод принимать простой указатель на функцию и реализовывать его в терминах указателя на функцию.Конечно, это работает только в том случае, если
myfunc
не зависит от членов класса, к которому он принадлежит (в этом случае его вообще не следовало помещать в класс)