Я пытаюсь реализовать некоторые методы класса для библиотек OpenGL, но у меня возникают проблемы с указателями на функции. Во всяком случае, скажем, у нас есть C++ код:Указатель на функцию класса как аргумент внешней функции
int funct1(int x){
return x*x;
}
class foo{
public:
int funct2(int x){
return x*x;
}
};
int conv(int (*f)(int)){
return f(1);
}
int main(){
conv(funct1);
foo bar;
conv(funct2);
}
Я понимаю, что funct2 является внутренний метод класса Foo, но при попытке изменить усл (funct2) к чему-то вроде конв (bar.funct2) дает ошибку, как:
argument of type ‘int (foo::)(int)’ does not match ‘int (*)(int)’
Я пытался найти помощь в других сообщениях, как это, но всегда было очень сложно. Может ли кто-нибудь здесь поменять и работать здесь?
Причина, по которой все остальные части кода сложны, заключается в следующем: простого решения нет. Вы принципиально не можете этого сделать. Указатель функции-члена не может быть преобразован в указатель свободной функции. Конец истории. Сожалею. –
Нестатические функции-члены принимают 'this' как скрытый аргумент. Однако он должен работать со статическими функциями-членами. –
, если вы в порядке с использованием C++ 11, меняя типы, используя 'std :: function' и, возможно, lambdas, тогда вы можете это сделать. Но с вашими ограничениями типа это невозможно сделать (как заявил @Konrad) – MariusSiuram