Ťažko povedať. Ak by som si písal celý kód sám, tak to možno neriešim, ale pri použití externej knižnice, hľadám riešenia, ako oddeliť môj kód od knižnice, ktorá používa vlastný main loop.
Takéto ukazovatele sa mi vidia ako najlepší spôsob, pretože ako statické metódy, tak si myslím že, aj statické ukazovatele na metódu sa môžu volať z kade chcem. Ale začínam mať pocit, že to asi tadeto nepôjde.
Podarilo sa mi spojazdniť ukazovateľ na statickú metódu, kde už funguje
Kód:
(a.*fu2)();
problém ale je, že potrebujem k tomu už vytvorený objekt triedy A. Ja by som potreboval niečo ako A::fu2() kde fu2 je ukazovateľ na metódu.
Tu je cely fungujúci kód, ak by to niekoho zaujímalo.
Kód:
triedy.h
class A;
typedef void(A::*staticPointFVoid)(); // fu2 FUNGUJE
class A
{
private:
std::string mText;
public:
typedef void(A::*staticF)();
/* kompilator hodi chybu ak sa priradi A::sF = &A::getSomeText; ak v typedef nie je
napisane A::, cize typedef void(*staticF)(); */
static staticF sF();
static std::string mSText;
void getSomeText()
{
std::cout << "getSomeText()\n";
}
};
Kód:
Source.cpp
#include "triedy.h"
std::string A::mSText;
staticPointFVoid fu2; // fu2 FUNGUJE
A::staticF A::sF() // sF FUNGUJE
{
return &getSomeText;
}
int main()
{
A a;
fu2 = &A::getSomeText; // fu2 FUNGUJE
a.setText("Toto je text.");
(a.*fu2)(); // fu2 FUNGUJE
A::staticF sFunc = A::sF(); // pouzitie sF()
(a.*sFunc)(); // FUNGUJE len s pomocou (a.*funkcia)
A::sF(); // NEFUNGUJE nic sa neudeje
return 0;
}