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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">String</span><span class="special">></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"><</span><span class="identifier">unspecified</span><span class="special">></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">&);</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"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">>::</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">&</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">&</span></code> 283 and returns <code class="computeroutput"><span class="identifier">extract_c_string</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">>::</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">&</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">&</span></code> 299 and returns <code class="computeroutput"><span class="identifier">extract_c_string</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">>::</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"><</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">></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