То, что вы объявили, является функцией, возвращающей пустоту *.Вы хотите указатель на функцию, возвращающую void.Итак, для начала вам нужно изменить прототип: вместо void * foo()
вы хотите void (*foo)()
.(Вам нужно будет разобраться, что именно вы хотите, но это идея.)
Получив его, вы вызываете его просто с помощью оператора вызова функции ()
, так что вы получите что-токак
class Button {
public:
char* text;
void* buttonclick();
Button (char* constext, void(* consbuttonclick())) {
text = constext;
consbuttonclick();
}
};
Еще лучше, однако, создать то, что называется классом функтора , например:
class ClickFunctor {
public:
void doIt(){
// code
}
}
, затем передать объект ClickFunctor.
class Button {
public:
char* text;
Button (char* constext, ClickFunctor cf) {
text = constext;
cf.doIt();
}
};
Теперь прочитайте C ++ FAQ об этих вещах.(Обновление: Маршалл называет эти вещи «функционоидами», а не «функторами», просто чтобы предупредить вас.)