Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 |
class Algo{ public: void execute((void)*progress(int)){ // bla progress(0); //blu progress(1); //.... } } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class System{ public: void func(){ _pAlgo.execute(proc); } private: void proc(int i) { // Progressbar updaten } Algo _pAlgo; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
System * _pSys = 0; void wrap(int i) { _pSys->proc(i); } class System{ public: System(){ _pSys = this; } func{ _pAlgo.execute(wrap(i)); } private: void proc(int i) { // Progressbar updaten } Algo _pAlgo; } |
Zitat
Nun möchte ich dieser aber eine progress funktion aus einer anderen klasse übergeben. Allerdings lässt das der compiler nicht zu ...
PD
unregistriert
C-/C++-Quelltext |
|
1 |
_pAlgo.execute(proc(i)); |
C-/C++-Quelltext |
|
1 |
_pAlgo.execute(proc); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
typedef MYBOOL UpdateFunction(class CView *, long ); void CMdi_editView::OnUpdate(CView* pSender,LPARAM IHint,CObject* /*pHint*/) { UpdateFunction *pUpdateFunction; if(IHint==0L) { CView::OnUpdate(pSender,0,NULL); } else { pUpdateFunction=(UpdateFunction *)IHint; if(pUpdateFunction(this,1)) CView::OnUpdate(pSender,0,NULL); } } |
Zitat von »"PD"«
Nich das ich mich mit Fubktionszeigern unheimlich auskennen würde aber müsste
C-/C++-Quelltext
1 _pAlgo.execute(proc(i));
nicht so lauten?
C-/C++-Quelltext
1 _pAlgo.execute(proc);
Nicht schlagen wenn ich jetzt falsch liege
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
typedef void (*FUNC)(int); void run(FUNC func, int i) { func(i); } void foo(int i) { .... } void process() { run(foo, 100); run(foo, 200); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
class System; typedef void (System::*METHOD)(int); class Algo { public: void execute(System* system, METHOD method) { (system->*method)(0); (system->*method)(1); .... } }; class System { public: void run() { algo_->execute(this, proc); } private: void proc(int i) { ... } private: Algo* algo_; }; |
Zitat von »"DragonMaster"«
Also...du must unterscheiden zwischen einer Funktion und einer Methode.
Du kannst keine Methode aufrufen ohne eine Instanz einer Klasse zu haben. Das klappt nicht.
Werbeanzeige