| // DEPRECATED in favor of adl_postconstruct with deconstruct<T>(). |
| // A simple framework for creating objects with postconstructors. |
| // The objects must inherit from boost::signals2::postconstructible, and |
| // have their lifetimes managed by |
| // boost::shared_ptr created with the boost::signals2::deconstruct_ptr() |
| // function. |
| // |
| // Copyright Frank Mori Hess 2007-2008. |
| // |
| // Use, modification and |
| // distribution is subject to 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) |
| |
| #ifndef BOOST_SIGNALS2_POSTCONSTRUCTIBLE_HPP |
| #define BOOST_SIGNALS2_POSTCONSTRUCTIBLE_HPP |
| |
| namespace boost |
| { |
| template<typename T> class shared_ptr; |
| |
| namespace signals2 |
| { |
| namespace postconstructible_adl_barrier |
| { |
| class postconstructible; |
| } |
| namespace detail |
| { |
| void do_postconstruct(const boost::signals2::postconstructible_adl_barrier::postconstructible *ptr); |
| } // namespace detail |
| |
| namespace postconstructible_adl_barrier |
| { |
| class postconstructible |
| { |
| public: |
| friend void detail::do_postconstruct(const postconstructible *ptr); |
| template<typename T> |
| friend void adl_postconstruct(const shared_ptr<T> &sp, postconstructible *p) |
| { |
| p->postconstruct(); |
| } |
| protected: |
| postconstructible() {} |
| virtual ~postconstructible() {} |
| virtual void postconstruct() = 0; |
| }; |
| } // namespace postconstructible_adl_barrier |
| using postconstructible_adl_barrier::postconstructible; |
| |
| } |
| } |
| |
| #endif // BOOST_SIGNALS2_POSTCONSTRUCTIBLE_HPP |