English

g++

Volání nestatické funkce z funkce statické


25.08.2006

Download zdrojáku (6.7kB)

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
{
	static void *ms_pObject;	///< Void pointer to some object
	
	void NonStaticFunction();
public:
	CClass ();
	~CClass();
	
	static void 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;
}


home / g++


Valid XHTML 1.0 Transitional