1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2<html> 3<head> 4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5<title>Future work</title> 6<link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css"> 7<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 8<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset"> 9<link rel="up" href="../poly_collection.html" title="Chapter 28. Boost.PolyCollection"> 10<link rel="prev" href="reference.html" title="Reference"> 11<link rel="next" href="release_notes.html" title="Release notes"> 12</head> 13<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 14<table cellpadding="2" width="100%"><tr> 15<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td> 16<td align="center"><a href="../../../index.html">Home</a></td> 17<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td> 18<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 19<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 20<td align="center"><a href="../../../more/index.htm">More</a></td> 21</tr></table> 22<hr> 23<div class="spirit-nav"> 24<a accesskey="p" href="reference.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../poly_collection.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="release_notes.html"><img src="../../../doc/src/images/next.png" alt="Next"></a> 25</div> 26<div class="section"> 27<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 28<a name="poly_collection.future_work"></a><a class="link" href="future_work.html" title="Future work">Future work</a> 29</h2></div></div></div> 30<div class="toc"><dl class="toc"> 31<dt><span class="section"><a href="future_work.html#poly_collection.future_work.alternative_rtti_systems">Alternative 32 RTTI systems</a></span></dt> 33<dt><span class="section"><a href="future_work.html#poly_collection.future_work.copy_traits">Copy traits</a></span></dt> 34<dt><span class="section"><a href="future_work.html#poly_collection.future_work.parallel_algorithms">Parallel 35 algorithms</a></span></dt> 36<dt><span class="section"><a href="future_work.html#poly_collection.future_work.variant_collection"><code class="computeroutput"><span class="identifier">variant_collection</span></code></a></span></dt> 37<dt><span class="section"><a href="future_work.html#poly_collection.future_work.ordered_polymorphic_collections">Ordered 38 polymorphic collections</a></span></dt> 39</dl></div> 40<p> 41 A number of features asked by reviewers and users of Boost.PolyCollection are 42 considered for inclusion into future versions of the library. 43 </p> 44<div class="section"> 45<div class="titlepage"><div><div><h3 class="title"> 46<a name="poly_collection.future_work.alternative_rtti_systems"></a><a class="link" href="future_work.html#poly_collection.future_work.alternative_rtti_systems" title="Alternative RTTI systems">Alternative 47 RTTI systems</a> 48</h3></div></div></div> 49<p> 50 Boost.PolyCollection can be extended to use <a href="../../../libs/type_index" target="_top">Boost.TypeIndex</a> 51 in RTTI-challenged scenarios. Taking this idea further, it is not unusual 52 that some environments (game engines, for instance) provide their own RTTI 53 framework: an even more ambitious extension to Boost.PolyCollection would 54 then be to make it configurable for user-provided RTTI through some sort 55 of traits class specifying replacements for <a href="http://en.cppreference.com/w/cpp/types/type_info" target="_top"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span></code></a> 56 and <a href="http://en.cppreference.com/w/cpp/language/typeid" target="_top"><code class="computeroutput"><span class="keyword">typeid</span></code></a>. 57 </p> 58</div> 59<div class="section"> 60<div class="titlepage"><div><div><h3 class="title"> 61<a name="poly_collection.future_work.copy_traits"></a><a class="link" href="future_work.html#poly_collection.future_work.copy_traits" title="Copy traits">Copy traits</a> 62</h3></div></div></div> 63<p> 64 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">base_collection</span></code> requires that stored objects 65 be <a href="http://en.cppreference.com/w/cpp/named_req/MoveConstructible" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">MoveConstructible</span></code></strong></span></a> 66 and <a href="http://en.cppreference.com/w/cpp/named_req/MoveAssignable" target="_top"><span class="bold"><strong><code class="computeroutput"><span class="identifier">MoveAssignable</span></code></strong></span></a>; 67 unfortunately, it is customary to restrict copying in OOP hierarchies to 68 avoid slicing, which would force users to revisit their class definitions 69 in order to use Boost.PolyCollection. This can be alleviated by offering 70 a configurable traits class where copy and assignment can be defined externally 71 </p> 72<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span> 73<span class="keyword">struct</span> <span class="identifier">copy_traits</span> 74<span class="special">{</span> 75 <span class="keyword">void</span> <span class="identifier">construct</span><span class="special">(</span><span class="keyword">void</span><span class="special">*,</span><span class="identifier">T</span><span class="special">&&);</span> 76 <span class="keyword">void</span> <span class="identifier">assign</span><span class="special">(</span><span class="identifier">T</span><span class="special">&,</span><span class="identifier">T</span><span class="special">&&);</span> 77<span class="special">};</span> 78</pre> 79<p> 80 with default implementations resorting to regular placement <code class="computeroutput"><span class="keyword">new</span></code> and <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="keyword">operator</span><span class="special">=</span></code>. 81 </p> 82</div> 83<div class="section"> 84<div class="titlepage"><div><div><h3 class="title"> 85<a name="poly_collection.future_work.parallel_algorithms"></a><a class="link" href="future_work.html#poly_collection.future_work.parallel_algorithms" title="Parallel algorithms">Parallel 86 algorithms</a> 87</h3></div></div></div> 88<p> 89 C++17 introduces <a href="http://en.cppreference.com/w/cpp/experimental/parallelism" target="_top">parallel 90 algorithms</a>, like for instance a parallel version of <a href="http://en.cppreference.com/w/cpp/algorithm/for_each" target="_top"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span></code></a>; 91 it is only natural then to provide the corresponding <a class="link" href="tutorial.html#poly_collection.tutorial.algorithms" title="Algorithms">Boost.PolyCollection-specific 92 algorithms</a>. The segmented nature of polymorphic collections makes 93 them particularly amenable to parallel processing. 94 </p> 95</div> 96<div class="section"> 97<div class="titlepage"><div><div><h3 class="title"> 98<a name="poly_collection.future_work.variant_collection"></a><a class="link" href="future_work.html#poly_collection.future_work.variant_collection" title="variant_collection"><code class="computeroutput"><span class="identifier">variant_collection</span></code></a> 99</h3></div></div></div> 100<p> 101 <span class="emphasis"><em>Closed polymorphism</em></span> is a kind of dynamic polymorphism 102 where the set of implementation types is fixed at definition time: the prime 103 example of this paradigm in C++ is <a href="http://en.cppreference.com/w/cpp/utility/variant" target="_top"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">variant</span></code></a>. 104 Although <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">any_collection</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><>></span></code> can act as a sort of replacement 105 for <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">variant</span><span class="special"><</span><span class="identifier">T1</span><span class="special">,...,</span><span class="identifier">TN</span><span class="special">>></span></code>, this is in fact more similar to 106 a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span></code><a href="http://en.cppreference.com/w/cpp/utility/any" target="_top"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">any</span></code></a><code class="computeroutput"><span class="special">></span></code>, and a collection class <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">variant_collection</span><span class="special"><</span><span class="identifier">T1</span><span class="special">,...,</span><span class="identifier">TN</span><span class="special">></span></code> 107 could be designed to better model closed polymorphism and take further advantage 108 of the fact that implementation types are fixed (for instance, internal virtual 109 calls can be completely eliminated). From a conceptual point of view, this 110 would require introducing a new <span class="bold"><strong><code class="computeroutput"><span class="identifier">ClosedPolymorphicCollection</span></code></strong></span> 111 notion and renaming the current <a class="link" href="reference.html#poly_collection.reference.polymorphic_containers.polymorphic_collections" title="Polymorphic collections"><span class="bold"><strong><code class="computeroutput"><span class="identifier">PolymorphicCollection</span></code></strong></span></a> 112 model to <span class="bold"><strong><code class="computeroutput"><span class="identifier">OpenPolymorphicCollection</span></code></strong></span>. 113 </p> 114</div> 115<div class="section"> 116<div class="titlepage"><div><div><h3 class="title"> 117<a name="poly_collection.future_work.ordered_polymorphic_collections"></a><a class="link" href="future_work.html#poly_collection.future_work.ordered_polymorphic_collections" title="Ordered polymorphic collections">Ordered 118 polymorphic collections</a> 119</h3></div></div></div> 120<p> 121 Users have expressed interest in polymorphic collections where elements are 122 kept ordered within their segment and optionally duplicates are excluded, 123 much like <a href="http://boost.org/doc/html/container/non_standard_containers.html#container.non_standard_containers.flat_xxx" target="_top"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">flat_set</span></code>/<code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">flat_multiset</span></code></a> 124 do over their internal data vector. The open question remains of whether 125 these collections should also guarantee some order between segments (current 126 ones don't) to allow for the definition of container-level <code class="computeroutput"><span class="keyword">operator</span><span class="special"><</span></code> 127 and related operators. 128 </p> 129</div> 130</div> 131<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 132<td align="left"></td> 133<td align="right"><div class="copyright-footer">Copyright © 2016-2020 Joaquín M López Muñoz<p> 134 Distributed under the Boost Software License, Version 1.0. (See accompanying 135 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>) 136 </p> 137</div></td> 138</tr></table> 139<hr> 140<div class="spirit-nav"> 141<a accesskey="p" href="reference.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../poly_collection.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="release_notes.html"><img src="../../../doc/src/images/next.png" alt="Next"></a> 142</div> 143</body> 144</html> 145