KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
After getting an answer to this question I discovered there are two valid ways to typedef a function pointer. typedef void (Function) (); typedef void (*PFunction) (); void foo () {} Function * p = foo; PFunction q = foo; I now prefer Function * p to PFunction q but apparently this doesn't work for pointer-to-member functions. Consider this contrived example. #include <iostream> struct Base { typedef void (Base :: *Callback) (); //^^^ remove this '*' and put it below (i.e. *cb) Callback cb; void go () { (this->*cb) (); } virtual void x () = 0; Base () { cb = &Base::x; } }; struct D1 : public Base { void x () { std :: cout << "D1\n"; } }; struct D2 : public Base { void x () { std :: cout << "D2\n"; } }; int main () { D1 d1; D2 d2; d1 .go (); d2 .go (); } But if I change it to the new preferred style: typedef void (Base :: Callback) () and Callback * cb , I get a compiler error at the point of typedef extra qualification 'Base::' on member 'Callback' Demo for error . Why is this not allowed? Is it simply an oversight or would it cause problems?
Tags (comma-separated)
Save Edits
Cancel