Ich experimentiere gerade mit der FLTK GUI Bibliothek, bin mir aber nicht sicher, was mit Callback-Funktionen los ist. Speziell der Typ Casting ist mir etwas fremd. Das folgende Beispiel zeigt ein einfaches Fenster mit einer Schaltfläche "Drücken". Wenn Sie die Taste drücken, ändert sich die Bezeichnung in "Fertig".Type Casting/Callback Funktionen
Das Label, das an die Callback-Funktion übergeben wird, wird als Typ const char*
deklariert und dann wird es gegossen void*
, zu geben, aber es ist möglich, dies als std::string
zu erklären und warf dann void*
? Ich bevorzuge moderne C++ - Zeichenfolgen als char
Notation.
Auch, ist die Syntax unten die beste Möglichkeit zum Umwandeln von einem Typ zum anderen? Ich habe gesehen, static_cast<type>()
vorher verwendet, aber was ist der sicherste/beste Weg, um eine Besetzung von const char*
zu void*
oder umgekehrt und warum? Was würde C++ 11 empfehlen?
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Native_File_Chooser.H>
#include <string>
void xyz_callback(Fl_Widget* w, void* userdata)
{
Fl_Button* b = (Fl_Button*)w; //cast widget w to button and assign to b
b->label((const char*)userdata); //cast userdata back to type const char*
}
int main(int argc, char **argv)
{
Fl_Window *window = new Fl_Window(340,180);
Fl_Button *button = new Fl_Button(20,40,300,100, "label");
button->label("Press");
button->labelfont(FL_BOLD+FL_ITALIC);
button->labelsize(36);
button->labeltype(FL_SHADOW_LABEL);
button->when(FL_WHEN_RELEASE);
const char* word = "Done";
button->callback(xyz_callback, (void*)word); //cast word to type void*
window->end();
window->show(argc, argv);
return Fl::run();
}
aber ist es möglich, dies als std :: string zu erklären und werfen dann auf „void *“? Ja. –
@BartekBanachewicz Möchten Sie die std :: string oder einen Zeiger auf std :: string? – harper
Nun, ein Zeiger darauf. –