KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
When implementing polymorphic behavior in C++ one can either use a pure virtual method or one can use function pointers (or functors). For example an asynchronous callback can be implemented by: Approach 1 class Callback { public: Callback(); ~Callback(); void go(); protected: virtual void doGo() = 0; }; //Constructor and Destructor void Callback::go() { doGo(); } So to use the callback here, you would need to override the doGo() method to call whatever function you want Approach 2 typedef void (CallbackFunction*)(void*) class Callback { public: Callback(CallbackFunction* func, void* param); ~Callback(); void go(); private: CallbackFunction* iFunc; void* iParam; }; Callback::Callback(CallbackFunction* func, void* param) : iFunc(func), iParam(param) {} //Destructor void go() { (*iFunc)(iParam); } To use the callback method here you will need to create a function pointer to be called by the Callback object. Approach 3 [This was added to the question by me (Andreas); it wasn't written by the original poster] template <typename T> class Callback { public: Callback() {} ~Callback() {} void go() { T t; t(); } }; class CallbackTest { public: void operator()() { cout << "Test"; } }; int main() { Callback<CallbackTest> test; test.go(); } What are the advantages and disadvantages of each implementation?
Tags (comma-separated)
Save Edits
Cancel