回答編集履歴
1
追記
answer
CHANGED
@@ -44,4 +44,67 @@
|
|
44
44
|
|
45
45
|
mng.ExecFunc(); // 全部呼んじゃうぞ!
|
46
46
|
}
|
47
|
+
```
|
48
|
+
|
49
|
+
[追記] ぢゃ...コレじゃダメっすか?
|
50
|
+
|
51
|
+
```C++
|
52
|
+
#include <iostream>
|
53
|
+
#include <vector>
|
54
|
+
|
55
|
+
class appUpdate;
|
56
|
+
|
57
|
+
struct ParamClass {
|
58
|
+
// 関数ポインタ
|
59
|
+
typedef void (appUpdate::* LPFN_FUNC)(void);
|
60
|
+
LPFN_FUNC m_pFunc;
|
61
|
+
// レシーバ
|
62
|
+
appUpdate* m_pReceiver;
|
63
|
+
ParamClass(appUpdate* recv, LPFN_FUNC func) : m_pReceiver(recv), m_pFunc(func) {}
|
64
|
+
void execute();
|
65
|
+
};
|
66
|
+
|
67
|
+
class appManager {
|
68
|
+
public:
|
69
|
+
appManager() {}
|
70
|
+
~appManager() {}
|
71
|
+
|
72
|
+
private:
|
73
|
+
std::vector<ParamClass> m_ParamList;
|
74
|
+
|
75
|
+
public:
|
76
|
+
// m_pFuncに登録された関数をコールする関数
|
77
|
+
void ExecFunc(void) {
|
78
|
+
for ( auto& param : m_ParamList ) param.execute();
|
79
|
+
}
|
80
|
+
|
81
|
+
// 関数の登録処理
|
82
|
+
void EntryFunc(ParamClass param) {
|
83
|
+
m_ParamList.emplace_back(param);
|
84
|
+
}
|
85
|
+
};
|
86
|
+
|
87
|
+
class appUpdate {
|
88
|
+
public:
|
89
|
+
appUpdate() {}
|
90
|
+
~appUpdate() {}
|
91
|
+
|
92
|
+
public:
|
93
|
+
// appManagerのParamClassに登録する関数
|
94
|
+
void UpdateRender() { std::cout << "appUpdate::UpdateRender()\n"; }
|
95
|
+
};
|
96
|
+
|
97
|
+
void ParamClass::execute() { (m_pReceiver->*m_pFunc)(); }
|
98
|
+
|
99
|
+
int main() {
|
100
|
+
appManager mngr;
|
101
|
+
|
102
|
+
appUpdate app1;
|
103
|
+
appUpdate app2;
|
104
|
+
|
105
|
+
mngr.EntryFunc(ParamClass(&app1, &appUpdate::UpdateRender));
|
106
|
+
mngr.EntryFunc(ParamClass(&app2, &appUpdate::UpdateRender));
|
107
|
+
|
108
|
+
mngr.ExecFunc();
|
109
|
+
}
|
47
110
|
```
|