Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_33_1/libs/utility/compressed_pair.htm @ 12

Last change on this file since 12 was 12, checked in by landauf, 17 years ago

added boost

File size: 4.3 KB
Line 
1<html>
2   <head>
3      <title>Header </title>
4      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
5      <meta name="Template" content="C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\html.dot">
6      <meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
7      <boostcompressed_pair.hpp>
8   </head>
9   <body bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#800080">
10      <h2><img src="../../boost.png" width="276" height="86">Header &lt;<a href="../../boost/detail/compressed_pair.hpp">boost/compressed_pair.hpp</a>&gt;</h2>
11      <p>All of the contents of &lt;boost/compressed_pair.hpp&gt; are defined inside
12         namespace boost.</p>
13      <p>The class compressed pair is very similar to std::pair, but if either of the
14         template arguments are empty classes, then the "empty base-class optimisation"
15         is applied to compress the size of the pair.</p>
16      <pre>template &lt;class T1, class T2&gt;
17class compressed_pair
18{
19public:
20        typedef T1                                                 first_type;
21        typedef T2                                                 second_type;
22        typedef typename call_traits&lt;first_type&gt;::param_type       first_param_type;
23        typedef typename call_traits&lt;second_type&gt;::param_type      second_param_type;
24        typedef typename call_traits&lt;first_type&gt;::reference        first_reference;
25        typedef typename call_traits&lt;second_type&gt;::reference       second_reference;
26        typedef typename call_traits&lt;first_type&gt;::const_reference  first_const_reference;
27        typedef typename call_traits&lt;second_type&gt;::const_reference second_const_reference;
28
29                 compressed_pair() : base() {}
30                 compressed_pair(first_param_type x, second_param_type y);
31        explicit compressed_pair(first_param_type x);
32        explicit compressed_pair(second_param_type y);
33
34        compressed_pair&amp; operator=(const compressed_pair&amp;);
35
36        first_reference       first();
37        first_const_reference first() const;
38
39        second_reference       second();
40        second_const_reference second() const;
41
42        void swap(compressed_pair&amp; y);
43};</pre>
44      <p>The two members of the pair can be accessed using the member functions first()
45         and second(). Note that not all member functions can be instantiated for all
46         template parameter types. In particular compressed_pair can be instantiated for
47         reference and array types, however in these cases the range of constructors
48         that can be used are limited. If types T1 and T2 are the same type, then there
49         is only one version of the single-argument constructor, and this constructor
50         initialises both values in the pair to the passed value.</p>
51      <P>Note that if either member is a POD type, then that member is not
52         zero-initialized by the compressed_pair default constructor: it's up to you to
53         supply an initial value for these types if you want them to have a default
54         value.</P>
55      <p>Note that compressed_pair can not be instantiated if either of the template
56         arguments is a union type, unless there is compiler support for
57         boost::is_union, or if boost::is_union is specialised for the union type.</p>
58      <p>Finally, a word of caution for Visual C++ 6 users: if either argument is an
59         empty type, then assigning to that member will produce memory corruption,
60         unless the empty type has a "do nothing" assignment operator defined. This is
61         due to a bug in the way VC6 generates implicit assignment operators.</p>
62      <hr>
63      <p>Revised 08 May 2001</p>
64      <p>© Copyright boost.org 2000. Permission to copy, use, modify, sell and
65         distribute this document is granted provided this copyright notice appears in
66         all copies. This document is provided "as is" without express or implied
67         warranty, and with no claim as to its suitability for any purpose.</p>
68      <p>Based on contributions by Steve Cleary, Beman Dawes, Howard Hinnant and John
69         Maddock.</p>
70      <p>Maintained by <a href="mailto:john@johnmaddock.co.uk">John Maddock</a>, the
71         latest version of this file can be found at <a href="http://www.boost.org">www.boost.org</a>,
72         and the boost discussion list at <a href="http://www.yahoogroups.com/list/boost">www.yahoogroups.com/list/boost</a>.</p>
73      <p>&nbsp;</p>
74   </body>
75</html>
Note: See TracBrowser for help on using the repository browser.