forked from boostorg/utility
102 lines
3.3 KiB
C++
102 lines
3.3 KiB
C++
// boost utility/base_from_member.hpp header file --------------------------//
|
|
|
|
// (C) Copyright Daryle Walker 2001, 2003. Permission to copy, use, modify,
|
|
// sell and distribute this software is granted provided this copyright
|
|
// notice appears in all copies. This software is provided "as is" without
|
|
// express or implied warranty, and with no claim as to its suitability for
|
|
// any purpose.
|
|
|
|
// See http://www.boost.org for most recent version including documentation.
|
|
|
|
#ifndef BOOST_UTILITY_BASE_FROM_MEMBER_HPP
|
|
#define BOOST_UTILITY_BASE_FROM_MEMBER_HPP
|
|
|
|
#include <boost/utility_fwd.hpp> // required for parameter defaults
|
|
|
|
|
|
namespace boost
|
|
{
|
|
|
|
// Base-from-member class template -----------------------------------------//
|
|
|
|
// Helper to initialize a base object so a derived class can use this
|
|
// object in the initialization of another base class. Used by
|
|
// Dietmar Kuehl from ideas by Ron Klatcho to solve the problem of a
|
|
// base class needing to be initialized by a member.
|
|
|
|
// Contributed by Daryle Walker
|
|
|
|
template < typename MemberType, int UniqueID >
|
|
class base_from_member
|
|
{
|
|
protected:
|
|
MemberType member;
|
|
|
|
base_from_member()
|
|
: member()
|
|
{}
|
|
|
|
template< typename T1 >
|
|
explicit base_from_member( T1 x1 )
|
|
: member( x1 )
|
|
{}
|
|
|
|
template< typename T1, typename T2 >
|
|
base_from_member( T1 x1, T2 x2 )
|
|
: member( x1, x2 )
|
|
{}
|
|
|
|
template< typename T1, typename T2, typename T3 >
|
|
base_from_member( T1 x1, T2 x2, T3 x3 )
|
|
: member( x1, x2, x3 )
|
|
{}
|
|
|
|
template< typename T1, typename T2, typename T3, typename T4 >
|
|
base_from_member( T1 x1, T2 x2, T3 x3, T4 x4 )
|
|
: member( x1, x2, x3, x4 )
|
|
{}
|
|
|
|
template< typename T1, typename T2, typename T3, typename T4, typename T5 >
|
|
base_from_member( T1 x1, T2 x2, T3 x3, T4 x4, T5 x5 )
|
|
: member( x1, x2, x3, x4, x5 )
|
|
{}
|
|
|
|
template< typename T1, typename T2, typename T3, typename T4, typename T5,
|
|
typename T6 >
|
|
base_from_member( T1 x1, T2 x2, T3 x3, T4 x4, T5 x5, T6 x6 )
|
|
: member( x1, x2, x3, x4, x5, x6 )
|
|
{}
|
|
|
|
template< typename T1, typename T2, typename T3, typename T4, typename T5,
|
|
typename T6, typename T7 >
|
|
base_from_member( T1 x1, T2 x2, T3 x3, T4 x4, T5 x5, T6 x6, T7 x7 )
|
|
: member( x1, x2, x3, x4, x5, x6, x7 )
|
|
{}
|
|
|
|
template< typename T1, typename T2, typename T3, typename T4, typename T5,
|
|
typename T6, typename T7, typename T8 >
|
|
base_from_member( T1 x1, T2 x2, T3 x3, T4 x4, T5 x5, T6 x6, T7 x7, T8 x8 )
|
|
: member( x1, x2, x3, x4, x5, x6, x7, x8 )
|
|
{}
|
|
|
|
template< typename T1, typename T2, typename T3, typename T4, typename T5,
|
|
typename T6, typename T7, typename T8, typename T9 >
|
|
base_from_member( T1 x1, T2 x2, T3 x3, T4 x4, T5 x5, T6 x6, T7 x7, T8 x8,
|
|
T9 x9 )
|
|
: member( x1, x2, x3, x4, x5, x6, x7, x8, x9 )
|
|
{}
|
|
|
|
template< typename T1, typename T2, typename T3, typename T4, typename T5,
|
|
typename T6, typename T7, typename T8, typename T9, typename T10 >
|
|
base_from_member( T1 x1, T2 x2, T3 x3, T4 x4, T5 x5, T6 x6, T7 x7, T8 x8,
|
|
T9 x9, T10 x10 )
|
|
: member( x1, x2, x3, x4, x5, x6, x7, x8, x9, x10 )
|
|
{}
|
|
|
|
}; // boost::base_from_member
|
|
|
|
} // namespace boost
|
|
|
|
|
|
#endif // BOOST_UTILITY_BASE_FROM_MEMBER_HPP
|