• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>Get a C-style String from a String Type</title>
5<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7<link rel="home" href="../../../../index.html" title="Spirit 2.5.8">
8<link rel="up" href="../string_traits.html" title="Extract a C-Style String to Generate Output from a String Type (Karma)">
9<link rel="prev" href="char_type_of.html" title="Determine the Character Type of a String">
10<link rel="next" href="../attribute_as.html" title="Atomically Extract an Attribute Value from a Container (Karma)">
11</head>
12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13<table cellpadding="2" width="100%"><tr>
14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
15<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
16<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
20</tr></table>
21<hr>
22<div class="spirit-nav">
23<a accesskey="p" href="char_type_of.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../string_traits.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../attribute_as.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
24</div>
25<div class="section">
26<div class="titlepage"><div><div><h5 class="title">
27<a name="spirit.advanced.customize.string_traits.extract_c_string"></a><a class="link" href="extract_c_string.html" title="Get a C-style String from a String Type">Get
28          a C-style String from a String Type</a>
29</h5></div></div></div>
30<h6>
31<a name="spirit.advanced.customize.string_traits.extract_c_string.h0"></a>
32            <span class="phrase"><a name="spirit.advanced.customize.string_traits.extract_c_string.extract_c_string"></a></span><a class="link" href="extract_c_string.html#spirit.advanced.customize.string_traits.extract_c_string.extract_c_string">extract_c_string</a>
33          </h6>
34<p>
35            <code class="computeroutput"><span class="identifier">extract_c_string</span></code> returns
36            a pointer to an array of elements of a const character type. It is invoked
37            through a static method <code class="computeroutput"><span class="identifier">call</span></code>.
38            This customization point is responsible for handling it's own garbage
39            collecting; the lifetime of the returned C-string must be no shorter
40            than the lifetime of the string instance passed to the <code class="computeroutput"><span class="identifier">call</span></code> method.
41          </p>
42<h6>
43<a name="spirit.advanced.customize.string_traits.extract_c_string.h1"></a>
44            <span class="phrase"><a name="spirit.advanced.customize.string_traits.extract_c_string.module_headers"></a></span><a class="link" href="extract_c_string.html#spirit.advanced.customize.string_traits.extract_c_string.module_headers">Module
45            Headers</a>
46          </h6>
47<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">home</span><span class="special">/</span><span class="identifier">support</span><span class="special">/</span><span class="identifier">string_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
48</pre>
49<p>
50            Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>.
51          </p>
52<div class="note"><table border="0" summary="Note">
53<tr>
54<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td>
55<th align="left">Note</th>
56</tr>
57<tr><td align="left" valign="top"><p>
58              This header file does not need to be included directly by any user
59              program as it is normally included by other Spirit header files relying
60              on its content.
61            </p></td></tr>
62</table></div>
63<h6>
64<a name="spirit.advanced.customize.string_traits.extract_c_string.h2"></a>
65            <span class="phrase"><a name="spirit.advanced.customize.string_traits.extract_c_string.namespace"></a></span><a class="link" href="extract_c_string.html#spirit.advanced.customize.string_traits.extract_c_string.namespace">Namespace</a>
66          </h6>
67<div class="informaltable"><table class="table">
68<colgroup><col></colgroup>
69<thead><tr><th>
70                    <p>
71                      Name
72                    </p>
73                  </th></tr></thead>
74<tbody><tr><td>
75                    <p>
76                      <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">traits</span></code>
77                    </p>
78                  </td></tr></tbody>
79</table></div>
80<h6>
81<a name="spirit.advanced.customize.string_traits.extract_c_string.h3"></a>
82            <span class="phrase"><a name="spirit.advanced.customize.string_traits.extract_c_string.synopsis"></a></span><a class="link" href="extract_c_string.html#spirit.advanced.customize.string_traits.extract_c_string.synopsis">Synopsis</a>
83          </h6>
84<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">String</span><span class="special">&gt;</span>
85<span class="keyword">struct</span> <span class="identifier">extract_c_string</span>
86<span class="special">{</span>
87    <span class="keyword">typedef</span> <span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="identifier">char_type</span><span class="special">;</span>
88
89    <span class="keyword">static</span> <span class="identifier">char_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">call</span> <span class="special">(</span><span class="identifier">String</span> <span class="keyword">const</span><span class="special">&amp;);</span>
90<span class="special">};</span>
91</pre>
92<h6>
93<a name="spirit.advanced.customize.string_traits.extract_c_string.h4"></a>
94            <span class="phrase"><a name="spirit.advanced.customize.string_traits.extract_c_string.template_parameters"></a></span><a class="link" href="extract_c_string.html#spirit.advanced.customize.string_traits.extract_c_string.template_parameters">Template
95            parameters</a>
96          </h6>
97<div class="informaltable"><table class="table">
98<colgroup>
99<col>
100<col>
101<col>
102</colgroup>
103<thead><tr>
104<th>
105                    <p>
106                      Parameter
107                    </p>
108                  </th>
109<th>
110                    <p>
111                      Description
112                    </p>
113                  </th>
114<th>
115                    <p>
116                      Default
117                    </p>
118                  </th>
119</tr></thead>
120<tbody><tr>
121<td>
122                    <p>
123                      <code class="computeroutput"><span class="identifier">String</span></code>
124                    </p>
125                  </td>
126<td>
127                    <p>
128                      A string type.
129                    </p>
130                  </td>
131<td>
132                    <p>
133                      none
134                    </p>
135                  </td>
136</tr></tbody>
137</table></div>
138<div class="variablelist">
139<p class="title"><b>Notation</b></p>
140<dl class="variablelist">
141<dt><span class="term"><code class="computeroutput"><span class="identifier">T</span></code></span></dt>
142<dd><p>
143                  An arbitrary type.
144                </p></dd>
145<dt><span class="term"><code class="computeroutput"><span class="identifier">Char</span></code></span></dt>
146<dd><p>
147                  A character type.
148                </p></dd>
149<dt><span class="term"><code class="computeroutput"><span class="identifier">Traits</span></code></span></dt>
150<dd><p>
151                  A character traits type.
152                </p></dd>
153<dt><span class="term"><code class="computeroutput"><span class="identifier">Allocator</span></code></span></dt>
154<dd><p>
155                  A standard allocator type.
156                </p></dd>
157<dt><span class="term"><code class="computeroutput"><span class="identifier">str</span></code></span></dt>
158<dd><p>
159                  A string instance.
160                </p></dd>
161</dl>
162</div>
163<h6>
164<a name="spirit.advanced.customize.string_traits.extract_c_string.h5"></a>
165            <span class="phrase"><a name="spirit.advanced.customize.string_traits.extract_c_string.expression_semantics"></a></span><a class="link" href="extract_c_string.html#spirit.advanced.customize.string_traits.extract_c_string.expression_semantics">Expression
166            Semantics</a>
167          </h6>
168<div class="informaltable"><table class="table">
169<colgroup>
170<col>
171<col>
172</colgroup>
173<thead><tr>
174<th>
175                    <p>
176                      Expression
177                    </p>
178                  </th>
179<th>
180                    <p>
181                      Semantics
182                    </p>
183                  </th>
184</tr></thead>
185<tbody>
186<tr>
187<td>
188                    <p>
189                      <code class="computeroutput"><span class="identifier">extract_c_string</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">char_type</span></code>
190                    </p>
191                  </td>
192<td>
193                    <p>
194                      The return type of <code class="computeroutput"><span class="identifier">call</span></code>.
195                    </p>
196                  </td>
197</tr>
198<tr>
199<td>
200                    <p>
201                      <code class="computeroutput"><span class="identifier">extract_c_string</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">call</span><span class="special">(</span><span class="identifier">str</span><span class="special">)</span></code>
202                    </p>
203                  </td>
204<td>
205                    <p>
206                      Extract a c-string of type <code class="computeroutput"><span class="identifier">char_type</span></code>
207                      from <code class="computeroutput"><span class="identifier">str</span></code>.
208                    </p>
209                  </td>
210</tr>
211</tbody>
212</table></div>
213<h6>
214<a name="spirit.advanced.customize.string_traits.extract_c_string.h6"></a>
215            <span class="phrase"><a name="spirit.advanced.customize.string_traits.extract_c_string.predefined_specializations"></a></span><a class="link" href="extract_c_string.html#spirit.advanced.customize.string_traits.extract_c_string.predefined_specializations">Predefined
216            Specializations</a>
217          </h6>
218<div class="informaltable"><table class="table">
219<colgroup>
220<col>
221<col>
222</colgroup>
223<thead><tr>
224<th>
225                    <p>
226                      Type
227                    </p>
228                  </th>
229<th>
230                    <p>
231                      Semantics
232                    </p>
233                  </th>
234</tr></thead>
235<tbody>
236<tr>
237<td>
238                    <p>
239                      <code class="computeroutput"><span class="identifier">T</span></code>
240                    </p>
241                  </td>
242<td>
243                    <p>
244                      <code class="computeroutput"><span class="identifier">call</span></code> takes
245                      a parameter of type <code class="computeroutput"><span class="identifier">T</span>
246                      <span class="keyword">const</span><span class="special">*</span></code>,
247                      and returns it without modification. An overload of <code class="computeroutput"><span class="identifier">call</span></code> takes a parameter of
248                      type <code class="computeroutput"><span class="identifier">T</span><span class="special">*</span></code>
249                      and casts it to <code class="computeroutput"><span class="identifier">T</span>
250                      <span class="keyword">const</span><span class="special">*</span></code>,
251                      returning the result. <code class="computeroutput"><span class="identifier">char_type</span></code>
252                      is <code class="computeroutput"><span class="identifier">char_type_of</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
253                    </p>
254                  </td>
255</tr>
256<tr>
257<td>
258                    <p>
259                      <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span></code>
260                    </p>
261                  </td>
262<td>
263                    <p>
264                      <code class="computeroutput"><span class="identifier">call</span></code> takes
265                      a parameter <code class="computeroutput"><span class="identifier">str</span></code>
266                      of type <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span></code> and returns <code class="computeroutput"><span class="identifier">extract_c_string</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">call</span><span class="special">(</span><span class="identifier">str</span><span class="special">)</span></code>.
267                      <code class="computeroutput"><span class="identifier">char_type</span></code> is
268                      <code class="computeroutput"><span class="identifier">char_type_of</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
269                    </p>
270                  </td>
271</tr>
272<tr>
273<td>
274                    <p>
275                      <code class="computeroutput"><span class="identifier">T</span><span class="special">&amp;</span></code>
276                    </p>
277                  </td>
278<td>
279                    <p>
280                      <code class="computeroutput"><span class="identifier">call</span></code> takes
281                      a parameter <code class="computeroutput"><span class="identifier">str</span></code>
282                      of type <code class="computeroutput"><span class="identifier">T</span><span class="special">&amp;</span></code>
283                      and returns <code class="computeroutput"><span class="identifier">extract_c_string</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">call</span><span class="special">(</span><span class="identifier">str</span><span class="special">)</span></code>. <code class="computeroutput"><span class="identifier">char_type</span></code>
284                      is <code class="computeroutput"><span class="identifier">char_type_of</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
285                    </p>
286                  </td>
287</tr>
288<tr>
289<td>
290                    <p>
291                      <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span></code>
292                    </p>
293                  </td>
294<td>
295                    <p>
296                      <code class="computeroutput"><span class="identifier">call</span></code> takes
297                      a parameter <code class="computeroutput"><span class="identifier">str</span></code>
298                      of type <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span></code>
299                      and returns <code class="computeroutput"><span class="identifier">extract_c_string</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">call</span><span class="special">(</span><span class="identifier">str</span><span class="special">)</span></code>. <code class="computeroutput"><span class="identifier">char_type</span></code>
300                      is <code class="computeroutput"><span class="identifier">char_type_of</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
301                    </p>
302                  </td>
303</tr>
304<tr>
305<td>
306                    <p>
307                      <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special">&lt;</span><span class="identifier">Char</span><span class="special">,</span>
308                      <span class="identifier">Traits</span><span class="special">,</span>
309                      <span class="identifier">Allocator</span><span class="special">&gt;</span></code>
310                    </p>
311                  </td>
312<td>
313                    <p>
314                      <code class="computeroutput"><span class="identifier">call</span></code> takes
315                      a parameter <code class="computeroutput"><span class="identifier">str</span></code>
316                      and returns <code class="computeroutput"><span class="identifier">str</span><span class="special">.</span><span class="identifier">c_str</span><span class="special">()</span></code>. <code class="computeroutput"><span class="identifier">char_type</span></code>
317                      is <code class="computeroutput"><span class="identifier">Char</span></code>.
318                    </p>
319                  </td>
320</tr>
321</tbody>
322</table></div>
323<h6>
324<a name="spirit.advanced.customize.string_traits.extract_c_string.h7"></a>
325            <span class="phrase"><a name="spirit.advanced.customize.string_traits.extract_c_string.when_to_implement"></a></span><a class="link" href="extract_c_string.html#spirit.advanced.customize.string_traits.extract_c_string.when_to_implement">When
326            to implement</a>
327          </h6>
328<p>
329            This customization point needs to be implemented whenever <a class="link" href="../is_string.html" title="Determine if a Type Should be Treated as a String (Qi and Karma)"><code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">is_string</span></code></a> is implemented.
330          </p>
331<h6>
332<a name="spirit.advanced.customize.string_traits.extract_c_string.h8"></a>
333            <span class="phrase"><a name="spirit.advanced.customize.string_traits.extract_c_string.related_attribute_customization_points"></a></span><a class="link" href="extract_c_string.html#spirit.advanced.customize.string_traits.extract_c_string.related_attribute_customization_points">Related
334            Attribute Customization Points</a>
335          </h6>
336<p>
337            If this customization point is implemented, the following other customization
338            points need to be implemented as well.
339          </p>
340<div class="informaltable"><table class="table">
341<colgroup>
342<col>
343<col>
344</colgroup>
345<thead><tr>
346<th>
347                    <p>
348                      Name
349                    </p>
350                  </th>
351<th>
352                    <p>
353                      When to implement
354                    </p>
355                  </th>
356</tr></thead>
357<tbody>
358<tr>
359<td>
360                    <p>
361                      <a class="link" href="is_char.html" title="Determine if a Type is a Character"><code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">is_char</span></code></a>
362                    </p>
363                  </td>
364<td>
365                    <p>
366                      For string types whose underlying character type is not <code class="computeroutput"><span class="keyword">char</span></code> or <code class="computeroutput"><span class="keyword">wchar_t</span></code>,
367                      <code class="computeroutput"><span class="identifier">is_char</span></code> must
368                      be implemented.
369                    </p>
370                  </td>
371</tr>
372<tr>
373<td>
374                    <p>
375                      <a class="link" href="../is_string.html" title="Determine if a Type Should be Treated as a String (Qi and Karma)"><code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">is_string</span></code></a>
376                    </p>
377                  </td>
378<td>
379                    <p>
380                      Whenever <code class="computeroutput"><span class="identifier">extract_c_string</span></code>
381                      is implemented.
382                    </p>
383                  </td>
384</tr>
385<tr>
386<td>
387                    <p>
388                      <a class="link" href="char_type_of.html" title="Determine the Character Type of a String"><code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">char_type_of</span></code></a>
389                    </p>
390                  </td>
391<td>
392                    <p>
393                      Whenever <code class="computeroutput"><span class="identifier">extract_c_string</span></code>
394                      is implemented.
395                    </p>
396                  </td>
397</tr>
398</tbody>
399</table></div>
400</div>
401<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
402<td align="left"></td>
403<td align="right"><div class="copyright-footer">Copyright © 2001-2011 Joel de Guzman, Hartmut Kaiser<p>
404        Distributed under the Boost Software License, Version 1.0. (See accompanying
405        file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
406      </p>
407</div></td>
408</tr></table>
409<hr>
410<div class="spirit-nav">
411<a accesskey="p" href="char_type_of.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../string_traits.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../attribute_as.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
412</div>
413</body>
414</html>
415