я так пробовал уже...
но дело в передаче метода, т.е.
int z1 = this->calcaround(x, y, this->somecheck1);
получается ошибка
mc.cpp:116: no matching function for call to `field::calcaround(const int&, const int&, <unknown type>)'
mc.cpp:66: candidates are: int field::calcaround(int, int, bool (field::*)(int, int))
а когда задаёшь явное преобразование
int z1 = this->calcaround(x, y, (checker)this->somecheck1);
то компилятору опять не нравится
mc.cpp:116: assuming pointer to member `bool field::somecheck1(int, int)'
mc.cpp:116: (a pointer to member can only be formed with `&field::somecheck1(int, int)'
я думаю: ладно, раз ему надо через & адрес брать, то пусть. Пишу
int z1 = this->calcaround(x, y, (checker)&this->somecheck1);
хотя с точки зрения C это неправильно, т.к. имя функции без последующих скобок рассматривается как указатель (адрес начала функции), и в данном случае я получаю указатель на указатель.
Компилятор же на последнее заявляет
mc.cpp:116: ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say `&field::somecheck1'
чего-то я, видимо, не понимаю...