回答編集履歴

1

追記

2018/11/16 05:39

投稿

fana
fana

スコア11632

test CHANGED
@@ -21,3 +21,103 @@
21
21
  }
22
22
 
23
23
  ```
24
+
25
+
26
+
27
+ ---
28
+
29
+
30
+
31
+ 都度Test1()から抜けたいなら,どこかに情報を覚えておいて,Test1()を呼び出す側で分岐するとかで.
32
+
33
+
34
+
35
+ ```ここに言語を入力
36
+
37
+ //情報
38
+
39
+ struct Context
40
+
41
+ {
42
+
43
+ int B;
44
+
45
+ void (*pNextWork)( Context* );
46
+
47
+ };
48
+
49
+
50
+
51
+ //
52
+
53
+ void Test2( Context *pC )
54
+
55
+ {
56
+
57
+ std::cout << "Test2" << std::endl;
58
+
59
+ pC->pNextWork = nullptr;
60
+
61
+ }
62
+
63
+
64
+
65
+ //
66
+
67
+ void Test1( Context *pC )
68
+
69
+ {
70
+
71
+ std::cout << "Test1" << std::endl;
72
+
73
+ if( !(rand() % 5) ){ pC->B = 0; } //※(仮)いつか終わるように
74
+
75
+
76
+
77
+ if( pC->B == INT_MAX )
78
+
79
+ {
80
+
81
+ pC->pNextWork = Test1;
82
+
83
+ return;
84
+
85
+ }
86
+
87
+
88
+
89
+ pC->pNextWork = Test2;
90
+
91
+ }
92
+
93
+
94
+
95
+ //
96
+
97
+ int main(void)
98
+
99
+ {
100
+
101
+ Context Ctxt;
102
+
103
+ Ctxt.B = INT_MAX;
104
+
105
+ Ctxt.pNextWork = Test1;
106
+
107
+
108
+
109
+ while( Ctxt.pNextWork )
110
+
111
+ {
112
+
113
+ Ctxt.pNextWork( &Ctxt );
114
+
115
+ }
116
+
117
+
118
+
119
+ return 0;
120
+
121
+ }
122
+
123
+ ```