Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c21d6ec

Browse files
author
dev0
committed
[hcheng] amazing func pointer for class member func
1 parent 5214111 commit c21d6ec

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// <Selected Topic in C++> Topic 13 Function Pointers
2+
#include <iostream>
3+
#include <vector>
4+
using namespace std;
5+
class BaseClass {
6+
public:
7+
int objId;
8+
BaseClass(int objId): objId(objId) {}
9+
virtual void callBackFun() {
10+
cout << "BaseClass callBackFunc " << objId << endl;
11+
}
12+
};
13+
14+
class DerivedClass : public BaseClass {
15+
public:
16+
DerivedClass(int objId) : BaseClass(objId) {}
17+
virtual void callBackFun() {
18+
cout << "DerivedClass callBackFunc " << objId << endl;
19+
}
20+
};
21+
22+
void commonCallbackFunc(BaseClass *obj, void(BaseClass::*callbackFuncPtr)()) {
23+
(obj->*callbackFuncPtr)();
24+
}
25+
26+
int main(int argc, char** argv) {
27+
//vector<BaseClass*> collector = {BaseClass(1), DerivedClass(2)}; // will call vector<T> allocator to allocate memory on heap??
28+
vector<BaseClass*> objs = {new BaseClass(1), new DerivedClass(2)};
29+
void(BaseClass::*callbackFuncPtr)() = &BaseClass::callBackFun;
30+
for (auto ptr : objs) {
31+
commonCallbackFunc(ptr, callbackFuncPtr);
32+
delete ptr;
33+
}
34+
return 0;
35+
}

0 commit comments

Comments
 (0)