12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- // Copyright Aleksey Gurtovoy 2002-2004
- //
- // Distributed under 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)
- //
- // See http://www.boost.org/libs/mpl for documentation.
- // $Id$
- // $Date$
- // $Revision$
- #include <boost/mpl/inherit.hpp>
- #include <boost/mpl/inherit_linearly.hpp>
- #include <boost/mpl/list.hpp>
- #include <iostream>
- namespace mpl = boost::mpl;
- using namespace mpl::placeholders;
- template< typename T >
- struct tuple_field
- {
- typedef tuple_field type; // note the typedef
- T field_;
- };
- template< typename T >
- inline
- T& field(tuple_field<T>& t)
- {
- return t.field_;
- }
- typedef mpl::inherit_linearly<
- mpl::list<int,char const*,bool>
- , mpl::inherit< _1, tuple_field<_2> >
- >::type my_tuple;
-
- int main()
- {
- my_tuple t;
-
- field<int>(t) = -1;
- field<char const*>(t) = "text";
- field<bool>(t) = false;
- std::cout
- << field<int>(t) << '\n'
- << field<char const*>(t) << '\n'
- << field<bool>(t) << '\n'
- ;
- return 0;
- }
|