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

回答編集履歴

1

関数生成の分離

2025/09/14 01:53

投稿

xebme
xebme

スコア1113

answer CHANGED
@@ -32,4 +32,48 @@
32
32
  }
33
33
  ```
34
34
 
35
- ちなみにC++はど素人です。さっき勉強しました。スタックやリストに関数を格納するのは他の言語ですでに経験済み。
35
+ ちなみにC++はど素人です。さっき勉強しました。スタックやリストに関数を格納するのは他の言語ですでに経験済み。
36
+
37
+ **関数生成の分離**
38
+
39
+ 関数生成を分離しました。クロージャによって必要なオブジェクトが関数に取り込まれているので関数はどこで実行してもよいことになります。
40
+
41
+ ```cpp
42
+ #include <iostream>
43
+ #include <functional>
44
+ #include <stack>
45
+
46
+ std::function<int()> val(int v) {
47
+ return [v]() {return v;};
48
+ }
49
+
50
+ std::function<int()> mult(std::stack<std::function<int()>> *s) {
51
+ return [s]() mutable {
52
+ auto x = s->top()();
53
+ s->pop();
54
+ auto y = s->top()();
55
+ s->pop();
56
+ auto result = x * y;
57
+ s->push(val(result));
58
+ return result;
59
+ };
60
+ }
61
+
62
+ int main() {
63
+
64
+ std::stack<std::function<int()>> s;
65
+ s.push(val(3));
66
+ s.push(val(5));
67
+ s.push(mult(&s));
68
+
69
+ std::function<int()> f = s.top();
70
+ s.pop();
71
+ f(); // claculation
72
+ std::cout << "3 5 * : " << s.top()() << std::endl;
73
+
74
+ return 0;
75
+
76
+ }
77
+
78
+ コード
79
+ ```