Talk About Network



Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > C++ > Pointer to non-...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 1 of 7 Topic 45807 of 45898
Post > Topic >>

Pointer to non-static member functions

by Tim Frink <plfriko@[EMAIL PROTECTED] > May 8, 2008 at 09:26 AM

Hi,

I'm experimenting with function pointers and found 
two questions. Let's assume this code:

  1 #include <iostream>
  2 class A;
  3
  4 ////////////////////////////////////////////
  5 class B
  6 {
  7   public:
  8     void printB( void (A::*)(void) );
  9 };
 10
 11 void B::printB( void (A::*func)(void) )
 12 {
 13   *func(); // not working
 14 }
 15
 16 ////////////////////////////////////////////
 17 class A
 18 {
 19   public:
 20     void printA(void);
 21     void invokeB(void);
 22
 23   private:
 24     B myB;
 25 };
 26
 27 void A::printA(void)
 28 {
 29   std::cout << "A::print" << std::endl;
 30   return;
 31 }
 32
 33 void A::invokeB(void)
 34 {
 35   myB.printB( &A::printA );
 36   return;
 37 }
 38
 39 ////////////////////////////////////////////
 40 int main(void)
 41 {
 42   A myA;
 43   a.invokeB();
 44
 45   return 0;
 46 }

What I want to achieve is a communication between two object 
with a callback function. Object A invokes a function in 
object B passing a callback function. The invoked function in
object B calls the passed callback function to communicate
with the caller A.

So, I'm passing a pointer to A::printA in line 35 to 
B::printB. The called member function printB of object 
myB than should deference the passed function pointer
(line 13, not working yet) to invoke again a function
(A::printfA) of the original caller. Thus, myA invokes
myB which in turn invokes myA again.

My first question concerns line 35. What exactly is the 
address of &A::printA? When I forward this value to "cout",
(cout << &A::printA) I get the output "1" and not an 
address. Since A::printA is a non-static member function,
it cannot be considered independent of a concrete object.
Thus, I would assume that &AA::printA is an offset which
must be added to the memory address where a concrete
object of class A is allocated. Adding the start address
and the offset would result in the address where the
function printA of an individual object of class A is
located.

And this brings me to my second question concerning line
13. When I try to compiler this code, I get the compiler error:
error: must use .* or ->* to call pointer-to-member function in `func
(...)'
I assume the problem is that the function pointer "func" has
no reference to a concrete object of class A (myA in this case).
So, the function cannot be invoked. How can I solve this?
Do I have to pass the address of myA to B::printB? 
Something like "myB.printB( &A::printA, this );" in line 35
and than use the pointer in "this" to invoke func?

Thank you.

Regards,
Tim




 7 Posts in Topic:
Pointer to non-static member functions
Tim Frink <plfriko@[EM  2008-05-08 09:26:37 
Re: Pointer to non-static member functions
peter koch <peter.koch  2008-05-08 02:56:31 
Re: Pointer to non-static member functions
James Kanze <james.kan  2008-05-10 07:26:11 
Re: Pointer to non-static member functions
Krice <paulkp@[EMAIL P  2008-05-08 03:31:19 
Re: Pointer to non-static member functions
Szabolcs Ferenczi <sza  2008-05-08 03:41:11 
Re: Pointer to non-static member functions
James Kanze <james.kan  2008-05-09 04:51:03 
Re: Pointer to non-static member functions
Tim Frink <plfriko@[EM  2008-05-09 17:56:40 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Wed May 14 19:14:26 CDT 2008.