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

回答編集履歴

1

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

2015/10/08 09:45

投稿

majiponi
majiponi

スコア1722

answer CHANGED
@@ -1,5 +1,3 @@
1
- 引数0個なら簡単で、
2
-
3
1
  struct onleaving
4
2
  {
5
3
  void (*func)();
@@ -7,5 +5,25 @@
7
5
  ~onleaving(){ func(); }
8
6
  };
9
7
 
8
+ template<class T>
9
+ struct onleaving1
10
+ {
11
+ void (*func)(T);
12
+ T arg;
13
+ onleaving1( void(*f)(T), T a )
14
+ : func(f), arg(a){}
15
+ ~onleaving1(){ func(arg); }
16
+ };
17
+
18
+ template<class... Types>
19
+ struct onleaving2
20
+ {
21
+ void (*func)( std::tuple<Types...> );
22
+ std::tuple<Types...> args;
23
+ onleaving2( void(*f)( const std::tuple<Types...>& ), Types... a )
24
+ : func(f), args( std::make_tuple(a...) ){}
25
+ ~onleaving2(){ func(args); }
26
+ };
27
+
10
28
  で動きます(多分)。
11
- 任意個のものはテンプレートを使えば実装そうなので、もう少しお待ちくださ
29
+ いろいろ調べてみましたが私の知識はこれ以上綺麗に書けそうないです…すみませんorz