Avatar billede hurra Novice
05. april 2005 - 19:12 Der er 3 kommentarer og
1 løsning

pointer til funktion i class

Jeg har brug for en pointer til en funktion i en klasse i en klasse... Det lyder rodet, altså en poiter til en funktion som er i en klasse, skal pege på en funktion som er i en anden klasse.

Det jeg har nu virker ikke helt optimalt, kan I fortælle mig hvad der er galt ?

Fra klassen:
class Handler
{
  public:
      void receiver();
      void *otherreceiver();
}

Et sted i koden hvor jeg bruger klassen:
  cu = new THandler;
  tank = new THandler;
  cu->otherreceiver = tank->receiver;
Avatar billede arne_v Ekspert
05. april 2005 - 19:16 #1
Det kan du ikke.

Du bliver nødt til at lade cu have en pointer til tank og så
lade cu's otherreceiver kalde tank's receiver
Avatar billede hurra Novice
05. april 2005 - 19:21 #2
Ok, det var lidt kedeligt, men der er jo vel ikke meget at gøre ved det :) Tak for hjælpen. Sender du lige en svar.
Avatar billede arne_v Ekspert
05. april 2005 - 19:25 #3
svar
Avatar billede bertelbrander Novice
05. april 2005 - 20:10 #4
Man kan lave noget i stil med, men det er nødvendigt med en pointer til den anden class:

#include <iostream>
#include <string>

class Handler
{
public:
  typedef void (Handler::*HandlerReceiver)();
  Handler(const std::string &aName) : Name(aName)
  {}
  void Receiver1()
  {
      std::cout << Name << " Recevier 1" << std::endl;
  }

  void Receiver2()
  {
      std::cout << Name << " Recevier 2" << std::endl;
  }
  void SetOther(Handler *aOther, HandlerReceiver aOtherReceiver)
  {
      OtherReceiver = aOtherReceiver;
      Other = aOther;
  }
  void Func()
  {
      std::cout << Name << " Func" << std::endl;
      (Other->*OtherReceiver)();
  }
private:
  HandlerReceiver OtherReceiver;
  Handler *Other;

  std::string Name;
};

int main()
{
  Handler H1("First");
  Handler H2("Second");
  H1.SetOther(&H2, &Handler::Receiver1);
  H2.SetOther(&H1, &Handler::Receiver2);
  H1.Func();
  H2.Func();
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester