1 // boost utility/base_from_member.hpp header file --------------------------//
3 // Copyright 2001, 2003 Daryle Walker. Use, modification, and distribution are
4 // subject to the Boost Software License, Version 1.0. (See accompanying file
5 // LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
7 // See <http://www.boost.org/libs/utility/> for the library's home page.
9 #ifndef BOOST_UTILITY_BASE_FROM_MEMBER_HPP
10 #define BOOST_UTILITY_BASE_FROM_MEMBER_HPP
12 #include <boost/utility_fwd.hpp> // required for parameter defaults
18 // Base-from-member class template -----------------------------------------//
20 // Helper to initialize a base object so a derived class can use this
21 // object in the initialization of another base class. Used by
22 // Dietmar Kuehl from ideas by Ron Klatcho to solve the problem of a
23 // base class needing to be initialized by a member.
25 // Contributed by Daryle Walker
27 template < typename MemberType, int UniqueID >
28 class base_from_member
37 template< typename T1 >
38 explicit base_from_member( T1 x1 )
42 template< typename T1, typename T2 >
43 base_from_member( T1 x1, T2 x2 )
47 template< typename T1, typename T2, typename T3 >
48 base_from_member( T1 x1, T2 x2, T3 x3 )
49 : member( x1, x2, x3 )
52 template< typename T1, typename T2, typename T3, typename T4 >
53 base_from_member( T1 x1, T2 x2, T3 x3, T4 x4 )
54 : member( x1, x2, x3, x4 )
57 template< typename T1, typename T2, typename T3, typename T4, typename T5 >
58 base_from_member( T1 x1, T2 x2, T3 x3, T4 x4, T5 x5 )
59 : member( x1, x2, x3, x4, x5 )
62 template< typename T1, typename T2, typename T3, typename T4, typename T5,
64 base_from_member( T1 x1, T2 x2, T3 x3, T4 x4, T5 x5, T6 x6 )
65 : member( x1, x2, x3, x4, x5, x6 )
68 template< typename T1, typename T2, typename T3, typename T4, typename T5,
69 typename T6, typename T7 >
70 base_from_member( T1 x1, T2 x2, T3 x3, T4 x4, T5 x5, T6 x6, T7 x7 )
71 : member( x1, x2, x3, x4, x5, x6, x7 )
74 template< typename T1, typename T2, typename T3, typename T4, typename T5,
75 typename T6, typename T7, typename T8 >
76 base_from_member( T1 x1, T2 x2, T3 x3, T4 x4, T5 x5, T6 x6, T7 x7, T8 x8 )
77 : member( x1, x2, x3, x4, x5, x6, x7, x8 )
80 template< typename T1, typename T2, typename T3, typename T4, typename T5,
81 typename T6, typename T7, typename T8, typename T9 >
82 base_from_member( T1 x1, T2 x2, T3 x3, T4 x4, T5 x5, T6 x6, T7 x7, T8 x8,
84 : member( x1, x2, x3, x4, x5, x6, x7, x8, x9 )
87 template< typename T1, typename T2, typename T3, typename T4, typename T5,
88 typename T6, typename T7, typename T8, typename T9, typename T10 >
89 base_from_member( T1 x1, T2 x2, T3 x3, T4 x4, T5 x5, T6 x6, T7 x7, T8 x8,
91 : member( x1, x2, x3, x4, x5, x6, x7, x8, x9, x10 )
94 }; // boost::base_from_member
99 #endif // BOOST_UTILITY_BASE_FROM_MEMBER_HPP