回答編集履歴
1
引数がある場合に対応しました
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
|