2009-10-10 2 views
2

Я пытаюсь иметь указатель на методы класса, так что у меня есть что-то вроде:Указатель на метод класса

class foo { 
    public: 
    static void bar() { 
} 
}; 

void (foo::*bar)() = &foo::bar; 

Это не компилируется :(я получаю:

> error: cannot convert ‘void (*)()’ to 
> ‘void (foo::*)()’ in 
> initialization 

ответ

4

Статический метод, используемый по имени, а не вызываемый, является указателем.

void (*bar)() = foo::bar; // used as a name, it's a function pointer 
... 
bar(); // calls it 
+0

TNX много для быстрого ответа :) – mfolnovich

+3

Нет, это не указатель, это функция. Тем не менее, он * разлагает * на указатель функции. – avakar

+0

Это скорее точка? – Will

2

указатель к статического элемента имеет тот же тип, как указатель, не являющегося членом

Try:.

void (*bar)() = &foo::bar; 
+0

Того много для быстрого ответа :) – mfolnovich

2

bar() - статическая функция, другими словами, нет параметра this.

void (*myfunptr)() = &(foo::bar); 
+0

TNX много для быстрого ответа :) – mfolnovich

Смежные вопросы