관리-도구
편집 파일: make_adaptable.hpp
#ifndef BOOST_BIND_MAKE_ADAPTABLE_HPP_INCLUDED #define BOOST_BIND_MAKE_ADAPTABLE_HPP_INCLUDED // // make_adaptable.hpp // // Copyright (c) 2002 Peter Dimov and Multi Media Ltd. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // namespace boost { namespace _bi { template<class R, class F> class af0 { public: typedef R result_type; explicit af0(F f): f_(f) { } result_type operator()() { return f_(); } result_type operator()() const { return f_(); } private: F f_; }; template<class R, class A1, class F> class af1 { public: typedef R result_type; typedef A1 argument_type; typedef A1 arg1_type; explicit af1(F f): f_(f) { } result_type operator()(A1 a1) { return f_(a1); } result_type operator()(A1 a1) const { return f_(a1); } private: F f_; }; template<class R, class A1, class A2, class F> class af2 { public: typedef R result_type; typedef A1 first_argument_type; typedef A2 second_argument_type; typedef A1 arg1_type; typedef A2 arg2_type; explicit af2(F f): f_(f) { } result_type operator()(A1 a1, A2 a2) { return f_(a1, a2); } result_type operator()(A1 a1, A2 a2) const { return f_(a1, a2); } private: F f_; }; template<class R, class A1, class A2, class A3, class F> class af3 { public: typedef R result_type; typedef A1 arg1_type; typedef A2 arg2_type; typedef A3 arg3_type; explicit af3(F f): f_(f) { } result_type operator()(A1 a1, A2 a2, A3 a3) { return f_(a1, a2, a3); } result_type operator()(A1 a1, A2 a2, A3 a3) const { return f_(a1, a2, a3); } private: F f_; }; template<class R, class A1, class A2, class A3, class A4, class F> class af4 { public: typedef R result_type; typedef A1 arg1_type; typedef A2 arg2_type; typedef A3 arg3_type; typedef A4 arg4_type; explicit af4(F f): f_(f) { } result_type operator()(A1 a1, A2 a2, A3 a3, A4 a4) { return f_(a1, a2, a3, a4); } result_type operator()(A1 a1, A2 a2, A3 a3, A4 a4) const { return f_(a1, a2, a3, a4); } private: F f_; }; } // namespace _bi template<class R, class F> _bi::af0<R, F> make_adaptable(F f) { return _bi::af0<R, F>(f); } template<class R, class A1, class F> _bi::af1<R, A1, F> make_adaptable(F f) { return _bi::af1<R, A1, F>(f); } template<class R, class A1, class A2, class F> _bi::af2<R, A1, A2, F> make_adaptable(F f) { return _bi::af2<R, A1, A2, F>(f); } template<class R, class A1, class A2, class A3, class F> _bi::af3<R, A1, A2, A3, F> make_adaptable(F f) { return _bi::af3<R, A1, A2, A3, F>(f); } template<class R, class A1, class A2, class A3, class A4, class F> _bi::af4<R, A1, A2, A3, A4, F> make_adaptable(F f) { return _bi::af4<R, A1, A2, A3, A4, F>(f); } } // namespace boost #endif // #ifndef BOOST_BIND_MAKE_ADAPTABLE_HPP_INCLUDED