| Main > Software Forum |
| Help requested: C++ member function pointers |
| << < (3/4) > >> |
| Spartan:
See my first reply -- make the member functions static, then pass in the ex as an argument.... |
| screaming:
What if you have 2 classes? --- Code: ---#include <stdio.h> // CLASS: ExampleFuncs class ExampleFuncs { public: static int foo(void); static int bar(void); }; int ExampleFuncs::foo(void) { return 1; } int ExampleFuncs::bar(void) { return 2; } class ExampleClass { public: int (*member_fn)(void); int member_int; int foo(void); int bar(void); void SetFoo(void); void SetBar(void); int CallMember(void); }; void ExampleClass::SetFoo(void) { member_int=ExampleFuncs::foo(); member_fn = &ExampleFuncs::foo; } void ExampleClass::SetBar(void) { member_int=ExampleFuncs::bar(); member_fn=&ExampleFuncs::bar; } int ExampleClass::CallMember(void) { return (*member_fn)(); } main(int argc, char **argv) { ExampleClass ex; int result; ex.SetFoo(); printf("result from SetFoo=%d, member_int=%d\n", ex.CallMember(),ex.member_int); ex.SetBar(); printf("result from SetBar=%d, member_int=%d\n", ex.CallMember(),ex.member_int); return 0; } --- End code --- It compiles on Linux..... steveb@freda ~/budda $ gcc -lstdc++ -o test main.cpp steveb@freda ~/budda $ ./test result from SetFoo=1, member_int=1 result from SetBar=2, member_int=2 steveb@freda ~/budda $ |
| Buddabing:
That won't work because foo() and bar() need to access member_int directly. |
| Spartan:
I keep telling you -- pass in ex as an argument! --- Code: ---#include <stdio.h> class ExampleClass { public: int (*member)(ExampleClass e); static int foo(ExampleClass e) { return 1; } static int bar(ExampleClass e) { return 2; } void SetFoo(void) { member=&ExampleClass::foo; // <----------------error here } void SetBar(void) { member=&ExampleClass::bar; // <----------------error here } int CallMember(ExampleClass e) { return (*member)(e); } }; int main(int argc, char **argv) { ExampleClass ex; int result; ex.SetFoo(); printf("result from SetFoo=%d\n",ex.CallMember(ex)); ex.SetBar(); printf("result from SetBar=%d\n",ex.CallMember(ex)); return 0; } --- End code --- |
| Buddabing:
Okay, this works, like Spartan said, pass a pointer to the class as a parameter to any function which can be assigned to a function pointer, then members of the class can be accessed from the statically declared members. --- Code: --- #include <stdio.h> class ExampleClass { public: int (*member_fn)(ExampleClass *); int member_int; static int foo(ExampleClass *); static int bar(ExampleClass *); void SetFoo(void); void SetBar(void); int CallMember(ExampleClass *); }; int ExampleClass::foo(ExampleClass *e) { e->member_int=1; return 1; } int ExampleClass::bar(ExampleClass *e) { e->member_int=2; return 2; } void ExampleClass::SetFoo(void) { member_fn=&ExampleClass::foo; } void ExampleClass::SetBar(void) { member_fn=&ExampleClass::bar; } int ExampleClass::CallMember(ExampleClass *e) { return (*member_fn)(e); } main(int argc, char **argv) { ExampleClass ex; int result; ex.SetFoo(); printf("result from SetFoo=%d, member_int=%d\n", ex.CallMember(&ex),ex.member_int); ex.SetBar(); printf("result from SetBar=%d, member_int=%d\n", ex.CallMember(&ex),ex.member_int); return 0; } --- End code --- Thanks all! |
| Navigation |
| Message Index |
| Next page |
| Previous page |