回答編集履歴

1

引数がある場合に対応しました

2015/10/08 09:45

投稿

majiponi
majiponi

スコア1720

test CHANGED
@@ -1,7 +1,3 @@
1
- 引数0個なら簡単で、
2
-
3
-
4
-
5
1
  struct onleaving
6
2
 
7
3
  {
@@ -16,6 +12,46 @@
16
12
 
17
13
 
18
14
 
15
+ template<class T>
16
+
17
+ struct onleaving1
18
+
19
+ {
20
+
21
+ void (*func)(T);
22
+
23
+ T arg;
24
+
25
+ onleaving1( void(*f)(T), T a )
26
+
27
+ : func(f), arg(a){}
28
+
29
+ ~onleaving1(){ func(arg); }
30
+
31
+ };
32
+
33
+
34
+
35
+ template<class... Types>
36
+
37
+ struct onleaving2
38
+
39
+ {
40
+
41
+ void (*func)( std::tuple<Types...> );
42
+
43
+ std::tuple<Types...> args;
44
+
45
+ onleaving2( void(*f)( const std::tuple<Types...>& ), Types... a )
46
+
47
+ : func(f), args( std::make_tuple(a...) ){}
48
+
49
+ ~onleaving2(){ func(args); }
50
+
51
+ };
52
+
53
+
54
+
19
55
  で動きます(多分)。
20
56
 
21
- 任意個もの、テンプレートを使えば実装できそうな、もう少しお待ちください。
57
+ いろいろ調べてみましたが、私知識でこれ以上綺麗に書けそうす…すみませんorz