19. februar 2005 - 11:02
Der er
4 kommentarer
syntax fejl på fncptr typedefination ?
Kan man skrive flg. typedefination om til at fungerer så der ikke kommer syntax fejl. ? class Content { }; class MyClass { public: void myfunc( Content ) { } }; typedef (void (MyClass::*)(Content)) CallBackFormat;
Annonceindlæg fra DE-CIX
19. februar 2005 - 13:44
#1
Jeg går ud fra at du vil lave en global funktions pointer til en funktion i class'en MyClass, der som argument tager en pointer til Content? Det kan man ikke. En normal funktions pointer kan kun pege på en static member i class'en. Men du kan godt lave en funktions pointer i class'en der peger på en af dens funktioner.
19. februar 2005 - 13:53
#2
En løsning: #include <iostream> #include <string> class ContentClass { public: class MyClass *My; std::string S; }; class MyClass { public: static void myfuncWrapper(ContentClass &Content) { Content.My->MyFunc(Content); } void MyFunc(ContentClass &Content) { std::cout << Content.S << std::endl; } }; typedef void (* FPtrType )(ContentClass &); int main() { ContentClass C; MyClass My; C.S = "Hello World"; C.My = &My; FPtrType FPtr = MyClass::myfuncWrapper; FPtr(C); }
19. februar 2005 - 14:03
#3
Et andet eksempel: #include <iostream> #include <string> class ContentClass { public: std::string S; }; class MyClass { public: MyClass() { FPtr = &MyClass::MyFunc1; } void MyFunc1(ContentClass &Content) { std::cout << "Func1: " << Content.S << std::endl; } void MyFunc2(ContentClass &Content) { std::cout << "Func2: " <<Content.S << std::endl; } typedef void (MyClass:: *FPtrType )(ContentClass &); FPtrType FPtr; void Do(ContentClass &Content) { (this->*FPtr)(Content); FPtr = &MyClass::MyFunc2; } }; int main() { ContentClass C; MyClass My; C.S = "Hello World"; My.Do(C); My.Do(C); }