Chris@16
|
1 // Boost.Bimap
|
Chris@16
|
2 //
|
Chris@16
|
3 // Copyright (c) 2006-2007 Matias Capeletto
|
Chris@16
|
4 //
|
Chris@16
|
5 // Distributed under the Boost Software License, Version 1.0.
|
Chris@16
|
6 // (See accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
7 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
8
|
Chris@16
|
9 /// \file relation/member_at.hpp
|
Chris@16
|
10 /// \brief Defines the tags for the member_at::side idiom
|
Chris@16
|
11
|
Chris@16
|
12 #ifndef BOOST_BIMAP_RELATION_MEMBER_AT_HPP
|
Chris@16
|
13 #define BOOST_BIMAP_RELATION_MEMBER_AT_HPP
|
Chris@16
|
14
|
Chris@101
|
15 #if defined(_MSC_VER)
|
Chris@16
|
16 #pragma once
|
Chris@16
|
17 #endif
|
Chris@16
|
18
|
Chris@16
|
19 #include <boost/config.hpp>
|
Chris@16
|
20
|
Chris@16
|
21 namespace boost {
|
Chris@16
|
22 namespace bimaps {
|
Chris@16
|
23 namespace relation {
|
Chris@16
|
24
|
Chris@16
|
25 /// \brief member_at::side idiom to access relation values and types using metaprogramming.
|
Chris@16
|
26 /**
|
Chris@16
|
27
|
Chris@16
|
28 This tags are used to specify which member you want to acces when using a metafunction over
|
Chris@16
|
29 a symmetrical type. The idea is to be able to write code like:
|
Chris@16
|
30
|
Chris@16
|
31 \code
|
Chris@16
|
32 result_of::get<member_at::left,relation>::type data = get<member_at::left>(rel);
|
Chris@16
|
33 \endcode
|
Chris@16
|
34
|
Chris@16
|
35 The relation class supports this idiom even when the elements are tagged. This is useful
|
Chris@16
|
36 because a user can decide to start tagging in any moment of the development.
|
Chris@16
|
37
|
Chris@16
|
38 See also member_with_tag, is_tag_of_member_at_left, is_tag_of_member_at_right, get
|
Chris@16
|
39 value_type_of, pair_by, pair_type_by.
|
Chris@16
|
40
|
Chris@16
|
41 \ingroup relation_group
|
Chris@16
|
42 **/
|
Chris@16
|
43 namespace member_at {
|
Chris@16
|
44
|
Chris@16
|
45 /// \brief Member at left tag
|
Chris@16
|
46 /**
|
Chris@16
|
47 See also member_at, rigth.
|
Chris@16
|
48 **/
|
Chris@16
|
49
|
Chris@16
|
50 struct left {};
|
Chris@16
|
51
|
Chris@16
|
52 /// \brief Member at right tag
|
Chris@16
|
53 /**
|
Chris@16
|
54 See also member_at, left.
|
Chris@16
|
55 **/
|
Chris@16
|
56
|
Chris@16
|
57 struct right {};
|
Chris@16
|
58
|
Chris@16
|
59 /// \brief Member info tag
|
Chris@16
|
60 /**
|
Chris@16
|
61 See also member_at, left, right.
|
Chris@16
|
62 **/
|
Chris@16
|
63
|
Chris@16
|
64 struct info {};
|
Chris@16
|
65
|
Chris@16
|
66 }
|
Chris@16
|
67
|
Chris@16
|
68 } // namespace relation
|
Chris@16
|
69 } // namespace bimaps
|
Chris@16
|
70 } // namespace boost
|
Chris@16
|
71
|
Chris@16
|
72 #endif // BOOST_BIMAP_RELATION_MEMBER_AT_HPP
|