현재 FLTK GUI 라이브러리를 실험 중이지만 콜백 함수가 무엇이 진행되고 있는지 확실히 알 수는 없습니다. — 구체적으로 타입 캐스팅 물건은 제게는 외계인입니다. 아래의 예는 "Press"라고 표시된 버튼이있는 기본 창을 보여줍니다. 버튼을 누르면 라벨이 "완료"로 바뀝니다. 콜백 함수에 전달타입 캐스팅/콜백 타입
레이블 유형 const char*
로 선언 후는 void*
를 입력 캐스팅, 그러나 그것은 std::string
로 선언하는 것이 가능하고 void*
캐스팅? 나는 현대의 C++ 문자열을 char
표기법보다 선호한다.
또한 아래 유형을 다른 유형으로 변환하는 가장 좋은 방법은 무엇입니까? 나는 static_cast<type>()
이 전에 사용 된 것을 보았습니다 만, const char*
에서 void*
또는 그 반대로 캐스트를 수행하는 가장 안전한 방법은 무엇입니까? 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();
}
을하지만, 그것은 표준 : : 문자열로 선언 할 수 있습니다 다음에 "무효 *"주연 : 당신이 그런 식으로 할 경우
코드는 다음과 같이 것인가? 네. –
@BartekBanachewicz std :: string 또는 std :: string에 대한 포인터를 캐스팅 하시겠습니까? – harper
글쎄, 그것에 대한 포인터. –