]> git.lyx.org Git - lyx.git/blob - boost/boost/utility/base_from_member.hpp
Boost 1.31.0
[lyx.git] / boost / boost / utility / base_from_member.hpp
1 //  boost utility/base_from_member.hpp header file  --------------------------//
2
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>.)
6
7 //  See <http://www.boost.org/libs/utility/> for the library's home page.
8
9 #ifndef BOOST_UTILITY_BASE_FROM_MEMBER_HPP
10 #define BOOST_UTILITY_BASE_FROM_MEMBER_HPP
11
12 #include <boost/utility_fwd.hpp>  // required for parameter defaults
13
14
15 namespace boost
16 {
17
18 //  Base-from-member class template  -----------------------------------------//
19
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.
24
25 // Contributed by Daryle Walker
26
27 template < typename MemberType, int UniqueID >
28 class base_from_member
29 {
30 protected:
31     MemberType  member;
32
33     base_from_member()
34         : member()
35         {}
36
37     template< typename T1 >
38     explicit base_from_member( T1 x1 )
39         : member( x1 )
40         {}
41
42     template< typename T1, typename T2 >
43     base_from_member( T1 x1, T2 x2 )
44         : member( x1, x2 )
45         {}
46
47     template< typename T1, typename T2, typename T3 >
48     base_from_member( T1 x1, T2 x2, T3 x3 )
49         : member( x1, x2, x3 ) 
50         {}
51
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 ) 
55         {}
56
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 ) 
60         {}
61
62     template< typename T1, typename T2, typename T3, typename T4, typename T5,
63      typename T6 >
64     base_from_member( T1 x1, T2 x2, T3 x3, T4 x4, T5 x5, T6 x6 )
65         : member( x1, x2, x3, x4, x5, x6 ) 
66         {}
67
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 ) 
72         {}
73
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 ) 
78         {}
79
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,
83      T9 x9 )
84         : member( x1, x2, x3, x4, x5, x6, x7, x8, x9 ) 
85         {}
86
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,
90      T9 x9, T10 x10 )
91         : member( x1, x2, x3, x4, x5, x6, x7, x8, x9, x10 ) 
92         {}
93
94 };  // boost::base_from_member
95
96 }  // namespace boost
97
98
99 #endif  // BOOST_UTILITY_BASE_FROM_MEMBER_HPP