C++相談室 part54
■ このスレッドは過去ログ倉庫に格納されています
0289デフォルトの名無しさん
2006/11/07(火) 19:48:09template< typename T, typename R > struct killer_base
: public std::unary_function< T, R > {
virtual ~killer_base() {};
virtual R operator()( T ) = 0;
};
template< typename F, typename T, typename R > struct killer
: public killer_base<T,R> {
F f;
killer( F func ) : f(func) {}
R operator()( T t ) { return f(t); }
};
template <typename T, typename R = void>
class AutoResource {
T resource;
auto_ptr< killer_base<T,R> > const killFunc; // noncopyable
public:
template< typename KillerFunc >
AutoResource(T res, KillerFunc func )
: resource(res), killFunc(new killer<KillerFunc,T,R>(func)) {}
~AutoResource() { (*killFunc)(resource); }
};
■ このスレッドは過去ログ倉庫に格納されています