funktionszeiger setzen
-
hoi,
wie setzte ich ein funktionszeiger NULL bzw lasse ihn auf andere funktionzeiger zeigen?
-
int func (int); int main(void) { int (*functionpointer1)(int) = func; double (*functionpointer2)(void) = 0; }Hoffe, ich konnte helfen,

Felix
-
ups ich hab mist gebaut sorry

-
und wie könnte jetzte ein funktionszeiger auf eine methode aussehen(methodenzeiger?)?
-
Dafür müsstest du dir schon ein struct bauen.
class INode { public: bool doSth() = 0; }; typedef (bool) INode::_fptr(); struct mptr { private: INode& node; _fptr fptr; public: mptr(INode& _node, _fptr _fptr) : node(_node) , fptr(_fptr) {} bool operator()() { return node.(*fptr); } }; class Node : public INode { public: bool func() { ... } }; int main() { Node myNode; mptr myPtr(myNode, myNode.func); if(myPtr()) cout << hell ya << endl; return 0; }so in etwa.
Ich hab's grad eben nur schnell runtergeschrieben - aber so in etwa.
-
genaueres steht auch in der FAQ dazu...
Kann man sehr schön templates draus bauen.
-
Also das hier ist Code, welcher auch wirklich in ähnlicher Form im Einsatz ist und damit funktioniert:
typedef void (CXX::*f)(void); struct t_data { t_data(CXX* pPage_, f pFunc_) : pPage(pPage_), pFunc(pFunc_) {} ~t_data() { pPage = 0; pFunc = 0; } void operator() () { if(pPage && pFunc) (pPage->*pFunc)(); } protected: CXX* pPage; f pFunc; }; class CXX { public: void funk(); protected: void bla(); }; void CXX::bla() { t_data pio(this, funk); pio(); }Natürlich isses mit Templates schöner und flexibler.
-
fireDev schrieb:
und wie könnte jetzte ein funktionszeiger auf eine methode aussehen(methodenzeiger?)?
class Test { public: int myInt; int myfunc(); }; ... int Test::*daten; //Elementzeiger auf die Daten deiner Klasse int (Test::*funcs)(); //Elementzeiger auf die Funktionen deiner Klasse Test la; //Nun die Offsets der Elemente holen daten = &Test::myInt; funcs = &Test::myfunc(); //Anhand des Offsets über ein Objekt das Element ansprechen; cout << la.*daten; (la.*myfunc)();
-
danke