3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>tag_cast</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="Chapter 1. Geometry">
8 <link rel="up" href="../core.html" title="Core Metafunctions">
9 <link rel="prev" href="tag.html" title="tag">
10 <link rel="next" href="../de9im.html" title="DE-9IM">
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>
22 <div class="spirit-nav">
23 <a accesskey="p" href="tag.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="../de9im.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
26 <div class="titlepage"><div><div><h4 class="title">
27 <a name="geometry.reference.core.tag_cast"></a><a class="link" href="tag_cast.html" title="tag_cast">tag_cast</a>
28 </h4></div></div></div>
30 <a class="indexterm" name="idm46186985884752"></a>
31 Metafunction defining a type being either the specified tag, or one of
32 the specified basetags if the type inherits from them.
35 <a name="geometry.reference.core.tag_cast.h0"></a>
36 <span class="phrase"><a name="geometry.reference.core.tag_cast.description"></a></span><a class="link" href="tag_cast.html#geometry.reference.core.tag_cast.description">Description</a>
39 Tags can inherit each other. A multi_point inherits, for example, both
40 the multi_tag and the pointlike_tag. Often behaviour can be shared between
41 different geometry types. A tag, found by the metafunction tag, can be
42 casted to a more basic tag, and then dispatched by that tag.
45 <a name="geometry.reference.core.tag_cast.h1"></a>
46 <span class="phrase"><a name="geometry.reference.core.tag_cast.synopsis"></a></span><a class="link" href="tag_cast.html#geometry.reference.core.tag_cast.synopsis">Synopsis</a>
50 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Tag</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">BaseTag</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">BaseTag2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">BaseTag3</span><span class="special">,</span>
51 <span class="keyword">typename</span> <span class="identifier">BaseTag4</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">BaseTag5</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">BaseTag6</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">BaseTag7</span><span class="special">></span>
52 <span class="keyword">struct</span> <span class="identifier">tag_cast</span>
53 <span class="special">{</span>
54 <span class="comment">// ...</span>
55 <span class="special">};</span>
60 <a name="geometry.reference.core.tag_cast.h2"></a>
61 <span class="phrase"><a name="geometry.reference.core.tag_cast.template_parameter_s_"></a></span><a class="link" href="tag_cast.html#geometry.reference.core.tag_cast.template_parameter_s_">Template
64 <div class="informaltable"><table class="table">
98 The tag to be casted to one of the base tags
129 Optional second base tag
146 Optional third base tag
163 Optional fourth base tag
180 Optional fifth base tag
197 Optional sixth base tag
214 Optional seventh base tag
221 <a name="geometry.reference.core.tag_cast.h3"></a>
222 <span class="phrase"><a name="geometry.reference.core.tag_cast.header"></a></span><a class="link" href="tag_cast.html#geometry.reference.core.tag_cast.header">Header</a>
228 <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
234 <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">tag_cast</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
236 <div class="note"><table border="0" summary="Note">
238 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
239 <th align="left">Note</th>
241 <tr><td align="left" valign="top"><p>
242 The specified tag list is handled in the specified order: as soon as
243 a tag inheriting the specified tag is found, it is defined as the metafunction
244 typedef <span class="bold"><strong>type</strong></span>.
247 <div class="note"><table border="0" summary="Note">
249 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
250 <th align="left">Note</th>
252 <tr><td align="left" valign="top"><p>
253 If none of the specified possible base tags is a base class of the specified
254 tag, the tag itself is defined as the <span class="bold"><strong>type</strong></span>
255 result of the metafunction.
259 <a name="geometry.reference.core.tag_cast.h4"></a>
260 <span class="phrase"><a name="geometry.reference.core.tag_cast.complexity"></a></span><a class="link" href="tag_cast.html#geometry.reference.core.tag_cast.complexity">Complexity</a>
266 <a name="geometry.reference.core.tag_cast.h5"></a>
267 <span class="phrase"><a name="geometry.reference.core.tag_cast.example"></a></span><a class="link" href="tag_cast.html#geometry.reference.core.tag_cast.example">Example</a>
270 Check if the polygon_tag can be casted to the areal_tag
274 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span>
275 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">typeinfo</span><span class="special">></span>
277 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
278 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
279 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">point_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
281 <span class="keyword">namespace</span> <span class="identifier">geo</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">;</span>
282 <span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
283 <span class="special">{</span>
284 <span class="keyword">typedef</span> <span class="identifier">geo</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">point_type</span><span class="special">;</span>
285 <span class="keyword">typedef</span> <span class="identifier">geo</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special"><</span><span class="identifier">point_type</span><span class="special">></span> <span class="identifier">polygon_type</span><span class="special">;</span>
287 <span class="keyword">typedef</span> <span class="identifier">geo</span><span class="special">::</span><span class="identifier">tag</span><span class="special"><</span><span class="identifier">polygon_type</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">tag</span><span class="special">;</span>
288 <span class="keyword">typedef</span> <span class="identifier">geo</span><span class="special">::</span><span class="identifier">tag_cast</span><span class="special"><</span><span class="identifier">tag</span><span class="special">,</span> <span class="identifier">geo</span><span class="special">::</span><span class="identifier">linear_tag</span><span class="special">,</span> <span class="identifier">geo</span><span class="special">::</span><span class="identifier">areal_tag</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">base_tag</span><span class="special">;</span>
290 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"tag: "</span> <span class="special"><<</span> <span class="keyword">typeid</span><span class="special">(</span><span class="identifier">tag</span><span class="special">).</span><span class="identifier">name</span><span class="special">()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
291 <span class="special"><<</span> <span class="string">"base tag: "</span> <span class="special"><<</span> <span class="keyword">typeid</span><span class="special">(</span><span class="identifier">base_tag</span><span class="special">).</span><span class="identifier">name</span><span class="special">()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
293 <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
294 <span class="special">}</span>
301 <pre class="programlisting">tag: struct boost::geometry::polygon_tag
302 base tag: struct boost::geometry::areal_tag
305 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
306 <td align="left"></td>
307 <td align="right"><div class="copyright-footer">Copyright © 2009-2019 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam
308 Wulkiewicz, Oracle and/or its affiliates<p>
309 Distributed under the Boost Software License, Version 1.0. (See accompanying
310 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>)
315 <div class="spirit-nav">
316 <a accesskey="p" href="tag.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="../de9im.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>