Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/libs/range/doc/faq.html @ 29

Last change on this file since 29 was 29, checked in by landauf, 16 years ago

updated boost from 1_33_1 to 1_34_1

File size: 6.3 KB
Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
2
3<html>
4<head>
5    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
6    <title>Boost.Range FAQ </title>
7    <link rel="stylesheet" href="style.css" type="text/css">
8</head>
9
10    <body>
11
12    <table border="0" >
13        <tr>
14            <td ><img src="../../../boost.png" border="0" ></td>
15            <td ><h1 align="center">Boost.Range</h1></td>
16        </tr>
17    </table>
18
19    <p>
20    <h2  >FAQ</h2> <a name="FAQ" ></a>
21    <ol  >
22        <li  >
23            <i>Why is there no difference between <code  >range_iterator&lt;C&gt;::type</code>
24            and <code  >range_const_iterator&lt;C&gt;::type</code> for <code>std::pair&lt;iterator, iterator&gt;</code></i>.
25        </li>
26        <p  >
27        In general it is not possible nor desirable to find a corresponding <code  >const_iterator</code>.
28        When it is possible to come up with one, the client might choose to construct a <code  >std::pair&lt;const_iterator,const_iterator&gt;</code>
29        object.
30        </p>
31        <p>
32        Note that an <a href="utility_class.html#iter_range">iterator_range</a>
33        is somewhat more convenient than a <code>pair</code> and that a <a
34        href="utility_class.html#sub_range"><code>sub_range</code></a> does
35       propagate const-ness. </p>
36
37        <li  >
38            <i>Why is there not supplied more types or more functions?</i>
39            <p  >
40            The library has been kept small because its current interface will
41            serve most
42            purposes. If and when a genuine need arises for more functionality, it can be
43            implemented.
44            </p>
45        </li>
46        <li  >
47            <i>How should I implement generic algorithms for ranges?</i>
48            <p  >
49            One should always start with a generic algorithm that takes two iterators (or
50            more) as input. Then use Boost.Range to build handier versions on top of the
51            iterator based algorithm. Please notice that once the range version of the
52            algorithm is done, it makes sense <i>not</i> to expose the iterator version in
53            the public interface.
54            </p>
55        </li>
56        <li>
57            <i>Why is there no Incrementable Range concept?</i>
58            <p>
59            Even though we speak of incrementable iterators, it would not make
60            much sense for ranges; for example, we cannot determine the size and
61            emptiness of a range since we cannot even compare
62            its iterators.
63            </p>
64            <p>
65            Note also that incrementable iterators are derived from output
66            iterators and so there exist no output range.
67             </p>
68        </li>
69        <!--
70        <li>
71            <i>Should I use qualified syntax, for example
72<blockquote><pre>
73<span class=identifier>boost</span><span class=special>::</span><span class=identifier>begin</span><span class=special>( </span><span class=identifier>r </span><span class=special>); </span>
74</pre></blockquote>
75            instead of
76            <blockquote>
77<pre><span class=keyword>using </span><span class=keyword>namespace </span><span class=identifier>boost</span><span class=special>;</span>
78<span class=identifier>begin</span><span class=special>( </span><span class=identifier>r </span><span class=special>)</span></pre></blockquote>
79            when calling functions in this library? If so, can I still rely on argument
80            dependent lookup (ADL) to kick in?</i>
81            <p>
82            The answer to the first question is that "it's up to you". The
83            answer to the second question is Yes. Normally qualified syntax
84            disables ADL, but the functions are implemented in a special
85            manner that preserves ADL properties. The trick was explained by
86            Daniel Frey on comp.lang.std.c++ in the thread "Whence Swap" and
87            it is best explained by some code: <blockquote>
88    <pre>
89<span class=keyword>namespace </span><span class=identifier>boost</span>
90<span class=special>{
91    </span><span class=keyword>namespace </span><span class=identifier>range_detail
92    </span><span class=special>{
93        </span><span class=keyword>template</span><span class=special>&lt; </span><span class=keyword>class </span><span class=identifier>T </span><span class=special>&gt;
94        </span><span class=keyword>typename </span><span class=identifier>range_iterator</span><span class=special>&lt;</span><span class=identifier>T</span><span class=special>&gt;:</span><span class=identifier>type </span><span class=identifier>begin</span><span class=special>( </span><span class=identifier>T</span><span class=special>&amp; </span><span class=identifier>r </span><span class=special>)
95        </span><span class=special>{ </span><span class=comment>/* normal implementation */ </span><span class=special>}
96    </span><span class=special>}
97
98    </span><span class=keyword>template</span><span class=special>&lt; </span><span class=keyword>class </span><span class=identifier>T </span><span class=special>&gt;
99    </span><span class=keyword>typename </span><span class=identifier>range_iterator</span><span class=special>&lt;</span><span class=identifier>T</span><span class=special>&gt;::</span><span class=identifier>type </span><span class=identifier>begin</span><span class=special>( </span><span class=identifier>T</span><span class=special>&amp; </span><span class=identifier>r </span><span class=special>)
100    </span><span class=special>{
101        </span><span class=comment>//
102        // Create ADL hook
103        //
104        </span><span class=keyword>using </span><span class=identifier>range_detail</span><span class=special>::</span><span class=identifier>begin</span><span class=special>;
105        </span><span class=keyword>return </span><span class=identifier>begin</span><span class=special>( </span><span class=identifier>r </span><span class=special>);
106    </span><span class=special>}</span>
107<span class=special>}    </span>
108</pre>
109</blockquote>
110Cool indeed!
111</p>
112     -->
113
114    </ol>
115
116
117    <hr>
118    <p>
119    (C) Copyright Thorsten Ottosen 2003-2004. Use, modification and distribution is subject to the Boost Software License, Version 1.0.
120    </p>
121
122    <br>
123    <br>
124    <br>
125    <br>
126    <br>
127    <br>
128    <br>
129    <br>
130    <br>
131    <br>
132    <br>
133    <br>
134
135
136    </body>
137</html>
138
Note: See TracBrowser for help on using the repository browser.