Pokud voláme ze statické funkce funkci nestatickou, tak nám kompiler vyhodí chybovou hlášku. V některých případech však tuto možnost potřebujeme. Já například potřebuji zaregistrovat funkce mého enginu do Lua skriptovacího jazyka. To lze jen přes statické funkce, které pak volají ostatní nestatické funkce enginu. Ukážeme si, jak toho lze jednoduše dosáhnout.
Vytvoříme třídu, která bude obsahovat statickou a nestatickou funkci a statickou proměnnou, která je ukazatelem na void.
class CClass{staticvoid *ms_pObject; ///< Void pointer to some objectvoid NonStaticFunction();public: CClass (); ~CClass();staticvoid StaticFunction();};
Ve statickém ukazateli na void je veškeré kouzlo. Nezapomeneme tuto proměnnou nadeklarovat ve zdrojovém souboru, aby byla viditelná
void *CClass::ms_pObject; ///< Void pointer to some object
Nyní ve statické funkci přetypujem ukazatel void na třídu CClass a zavoláme pomocí přetypované třídy nestatickou funkci.
void CClass::StaticFunction(){ std::cout << "I try call non static function from static function..." << endl;// Cast the void pointer CClass *pSomeClass = (CClass*)ms_pObject; // Try call non static function pSomeClass->NonStaticFunction();}void CClass::NonStaticFunction(){ std::cout << "Ok... Non static function now calling from static function ..." << endl;}