Avatar billede krismort Nybegynder
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;
Avatar billede bertelbrander Novice
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.
Avatar billede bertelbrander Novice
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);
}
Avatar billede bertelbrander Novice
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);
}
Avatar billede krismort Nybegynder
20. februar 2005 - 22:14 #4
tak bertel
det var:
typedef void (MyClass:: *FncPtr)(Content&);
som fik det det til at fungerer
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