Obecnie eksperymentuję z biblioteką GUI FLTK, ale nie jestem do końca pewien, co się dzieje z funkcjami oddzwaniania. Specyfika oddzwaniania jest dla mnie nieco obca. Poniższy przykład pokazuje podstawowe okno z przyciskiem "Press". Po naciśnięciu przycisku etykieta zmieni się na "Gotowe".Funkcje odlewania/oddzwaniania
Etykieta, który jest przekazywany do funkcji wywołania zwrotnego jest zadeklarowany jako typ const char*
a następnie odlewa się wpisywać void*
, ale jest to możliwe, aby zadeklarować to jako std::string
a następnie oddane do void*
? Wolę używać nowoczesnych ciągów C++ niż notacja char
.
Ponadto, czy składnia jest poniżej najlepszego sposobu przesyłania z jednego rodzaju do drugiego? Widziałem wcześniej używane static_cast<type>()
, ale jaki jest najbezpieczniejszy/najlepszy sposób wykonania odlewania z const char*
do void*
i odwrotnie i dlaczego? Co poleciłby C++ 11?
#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();
}
ale jest to możliwe, aby zadeklarować to jako std :: string, a następnie oddane do "void *"? Tak. –
@BartekBanachewicz Czy chcesz rzucić std :: string lub wskaźnik na std :: string? – harper
Cóż, wskaźnik do niego. –