1 // Boost.TypeErasure library
2 //
3 // Copyright 2015 Steven Watanabe
4 //
5 // Distributed under the Boost Software License Version 1.0. (See
6 // accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
8 //
9 // $Id$
10 
11 #ifndef BOOST_TYPE_ERASURE_DYNAMIC_BINDING_HPP_INCLUDED
12 #define BOOST_TYPE_ERASURE_DYNAMIC_BINDING_HPP_INCLUDED
13 
14 #include <boost/type_erasure/detail/dynamic_vtable.hpp>
15 #include <boost/type_erasure/static_binding.hpp>
16 
17 namespace boost {
18 namespace type_erasure {
19 
20 /**
21  * Maps a set of placeholders to actual types.
22  */
23 template<class PlaceholderList>
24 class dynamic_binding
25 {
26 public:
27     template<class Map>
dynamic_binding(const static_binding<Map> &)28     dynamic_binding(const static_binding<Map>&)
29     {
30         impl.template init<Map>();
31     }
32     template<class Concept, class Map>
dynamic_binding(const binding<Concept> & other,const static_binding<Map> &)33     dynamic_binding(const binding<Concept>& other, const static_binding<Map>&)
34     {
35         impl.template convert_from<Map>(*other.impl.table);
36     }
37 private:
38     template<class Concept>
39     friend class binding;
40     typename ::boost::type_erasure::detail::make_dynamic_vtable<PlaceholderList>::type impl;
41 };
42 
43 }
44 }
45 
46 #endif
47