質問編集履歴

2

解決

2018/11/12 07:54

投稿

opyon
opyon

スコア1009

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,131 @@
1
+ ###解決!
2
+
3
+ 回答くださった方ありがとうございました。
4
+
5
+ どの回答もとても参考になりました。
6
+
7
+ 具体的なコードもあったので分かりやすかったです。
8
+
9
+
10
+
11
+ 実際頻繁に使うのか?と言われると可読性や冗長になることもあるのでなんとも言えませんが、
12
+
13
+ マクロで出来ないことが実現しやすいし出来ることの可能性はかなり広がったと思います。
14
+
15
+
16
+
17
+ ###サンプルコード(早速使ってみた)
18
+
19
+ ```C++
20
+
21
+ #include <bits/stdc++.h>
22
+
23
+
24
+
25
+ bool is_odd(int x)
26
+
27
+ {
28
+
29
+ return x % 2;
30
+
31
+ }
32
+
33
+
34
+
35
+ unsigned fibo(unsigned n)
36
+
37
+ {
38
+
39
+ if (n < 2)
40
+
41
+ {
42
+
43
+ return 1;
44
+
45
+ }
46
+
47
+ return fibo(n - 1) + fibo(n - 2);
48
+
49
+ }
50
+
51
+
52
+
53
+ template <typename T1, typename T2, typename Func1, typename Func2, typename T3>
54
+
55
+ void yn(const T1 &e1, const T2 &e2, const Func1 func1, const Func2 func2, const T3 &fe1)
56
+
57
+ {
58
+
59
+ auto ret1 = func2(fe1);
60
+
61
+ auto ret2 = (func1(ret1) ? e1 : e2);
62
+
63
+ std::cout << "ret1:" << ret1 << " ret2:" << ret2 << "\n";
64
+
65
+ }
66
+
67
+
68
+
69
+ // 上記では出力するために分けていますが入れ子でも使えますし
70
+
71
+ // 可変長でも使えそうです
72
+
73
+ // ret = (func1(func2(fe1)) ? e1 : e2);
74
+
75
+
76
+
77
+ int main()
78
+
79
+ {
80
+
81
+ // フィボナッチ数列のi項の奇数偶数判定
82
+
83
+ for (unsigned i = 0; i < 20; i++)
84
+
85
+ {
86
+
87
+ std::cout << "i:" << i << " ";
88
+
89
+ yn("odd", "even", is_odd, fibo, i);
90
+
91
+ }
92
+
93
+ getchar();
94
+
95
+ return 0;
96
+
97
+ }
98
+
99
+
100
+
101
+ // 出力サンプル
102
+
103
+ // i:0 ret1:1 ret2:odd
104
+
105
+ // i:1 ret1:1 ret2:odd
106
+
107
+ // i:2 ret1:2 ret2:even
108
+
109
+ // i:3 ret1:3 ret2:odd
110
+
111
+ // i:4 ret1:5 ret2:odd
112
+
113
+ // i:5 ret1:8 ret2:even
114
+
115
+ // i:6 ret1:13 ret2:odd
116
+
117
+ // i:7 ret1:21 ret2:odd
118
+
119
+ // i:8 ret1:34 ret2:even
120
+
121
+ // i:9 ret1:55 ret2:odd
122
+
123
+
124
+
125
+ ```
126
+
127
+
128
+
1
129
  ###追記
2
130
 
3
131
  [lambda式を引数として受け取る関数の自作はできますか?](https://teratail.com/questions/37610)

1

追記 参考URL

2018/11/12 07:54

投稿

opyon
opyon

スコア1009

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,15 @@
1
+ ###追記
2
+
3
+ [lambda式を引数として受け取る関数の自作はできますか?](https://teratail.com/questions/37610)
4
+
5
+ こちらの回答が参考になりそうです。
6
+
7
+ また時間のある時に作ってみます。
8
+
9
+
10
+
11
+
12
+
1
13
  ###知りたいこと
2
14
 
3
15
  関数の引数に関数を渡せますか?