Почему компилятор обрабатывает &Foo::foo
как void (*)()
. Я ожидаю, что он будет рассматриваться как void(Foo::*)()
, так как он является членом Foo
.Передайте указатель на статический метод
class Foo
{
public:
static void foo (void){}
};
void foo (void(Foo::*)(void)){}
int main()
{
foo(&Foo::foo); // error: cannot convert ‘void (*)()’ to ‘void (Foo::*)()’
return 0;
}
Нет другого варианта, который должен иметь простой член функции, потому что указатель 'this' неявно передается этой функции (для этого используется' Foo :: * '). –
@ g-makulik Прошу прощения, я не могу понять. Не могли бы вы рассказать? – Kolyunya
Ответ на крис указывает на это очень ясно: 'void (Foo :: *)()' is for (нестатические члены). Также обратите внимание, что '-> *' для разыменования указателя функции-члена формирует собственный оператор, который нельзя переопределить. –