teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2016/07/29 07:53

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -15,6 +15,7 @@
15
15
  例えば、thisのクラス名がFooだったとします。
16
16
  また、(2)を実行している関数をBarだったとします。
17
17
  更に、SendMSAsck()にint型の値、123を渡したかったとします。
18
+ 下記のようにFooにメンバ変数Bazを定義して中継させることで、123をBar()からSendMSAck()へ渡せます。
18
19
 
19
20
  ```C++
20
21
  class BundleProtocol

1

補足

2016/07/29 07:52

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -8,4 +8,38 @@
8
8
 
9
9
  ScheduleEvent()はSimulationEventのポインタ(仮にeventとします)を受け取り、イベント実行条件が成立したら、event->ExecuteEvent()を実行するのではないかと思います。
10
10
 
11
- ExecuteEvent()は、`MsAckPtr->SendMSAck();`を呼び出しています。ここで、BundleProtocolの派生クラスが持つ仮想関数SendMSAck()が呼び出されます。
11
+ ExecuteEvent()は、`MsAckPtr->SendMSAck();`を呼び出しています。ここで、BundleProtocolの派生クラスが持つ仮想関数SendMSAck()が呼び出されます。
12
+
13
+ ---
14
+ 【補足】
15
+ 例えば、thisのクラス名がFooだったとします。
16
+ また、(2)を実行している関数をBarだったとします。
17
+ 更に、SendMSAsck()にint型の値、123を渡したかったとします。
18
+
19
+ ```C++
20
+ class BundleProtocol
21
+ {
22
+ public:
23
+ virtual void SendMSAsck()
24
+ {
25
+ // 省略
26
+ }
27
+ };
28
+ class Foo : public BundleProtocol
29
+ {
30
+ int Baz;
31
+ public:
32
+ void Bar()
33
+ {
34
+
35
+ Baz=123; // ここで渡したい値を設定
36
+ simulationEngineInterfacePtr->ScheduleEvent(new ReSendMSAckEvent(this));
37
+
38
+ }
39
+
40
+ void SendMSAsck()
41
+ {
42
+ std::cout << Baz << "\n"; // ここで123を受け取れる。
43
+ }
44
+ };
45
+ ```