|
|
@@ -179,8 +179,9 @@
|
|
|
|
<p>
|
|
|
|
<p>
|
|
|
|
Mp11 is a C++11 metaprogramming library based on template aliases and variadic
|
|
|
|
Mp11 is a C++11 metaprogramming library based on template aliases and variadic
|
|
|
|
templates. It implements the approach outlined in the article <a href="http://pdimov.com/cpp2/simple_cxx11_metaprogramming.html" target="_top">Simple
|
|
|
|
templates. It implements the approach outlined in the article <a href="http://pdimov.com/cpp2/simple_cxx11_metaprogramming.html" target="_top">Simple
|
|
|
|
C++11 metaprogramming</a> (<a href="http://pdimov.com/cpp2/simple_cxx11_metaprogramming_2.html" target="_top">part
|
|
|
|
C++11 metaprogramming</a> and <a href="http://pdimov.com/cpp2/simple_cxx11_metaprogramming_2.html" target="_top">its
|
|
|
|
2</a>).
|
|
|
|
sequel</a>. Reading these articles before proceeding with this documentation
|
|
|
|
|
|
|
|
is highly recommended.
|
|
|
|
</p>
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
<p>
|
|
|
|
The general principles upon which Mp11 is built are that algorithms and metafunctions
|
|
|
|
The general principles upon which Mp11 is built are that algorithms and metafunctions
|
|
|
@@ -322,7 +323,8 @@
|
|
|
|
<span class="keyword">using</span> <span class="identifier">T3</span> <span class="special">=</span> <span class="keyword">decltype</span><span class="special">(</span> <span class="identifier">T1</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">T2</span><span class="special">()</span> <span class="special">);</span>
|
|
|
|
<span class="keyword">using</span> <span class="identifier">T3</span> <span class="special">=</span> <span class="keyword">decltype</span><span class="special">(</span> <span class="identifier">T1</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">T2</span><span class="special">()</span> <span class="special">);</span>
|
|
|
|
<span class="keyword">using</span> <span class="identifier">T4</span> <span class="special">=</span> <span class="identifier">result</span><span class="special"><</span><span class="identifier">T1</span><span class="special">,</span> <span class="identifier">T2</span><span class="special">>;</span>
|
|
|
|
<span class="keyword">using</span> <span class="identifier">T4</span> <span class="special">=</span> <span class="identifier">result</span><span class="special"><</span><span class="identifier">T1</span><span class="special">,</span> <span class="identifier">T2</span><span class="special">>;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special"><</span><span class="identifier">T3</span><span class="special">,</span> <span class="identifier">T4</span><span class="special">>::</span><span class="identifier">value</span><span class="special">?</span> <span class="string">"[PASS] "</span><span class="special">:</span> <span class="string">"[FAIL] "</span> <span class="special">)</span> <span class="special"><<</span> <span class="identifier">name</span><span class="special"><</span><span class="identifier">T1</span><span class="special">>()</span> <span class="special"><<</span> <span class="string">" + "</span> <span class="special"><<</span> <span class="identifier">name</span><span class="special"><</span><span class="identifier">T2</span><span class="special">>()</span> <span class="special"><<</span> <span class="string">" -> "</span> <span class="special"><<</span> <span class="identifier">name</span><span class="special"><</span><span class="identifier">T3</span><span class="special">>()</span> <span class="special"><<</span> <span class="string">", result: "</span> <span class="special"><<</span> <span class="identifier">name</span><span class="special"><</span><span class="identifier">T4</span><span class="special">>()</span> <span class="special"><<</span> <span class="string">" "</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special"><</span><span class="identifier">T3</span><span class="special">,</span> <span class="identifier">T4</span><span class="special">>::</span><span class="identifier">value</span><span class="special">?</span> <span class="string">"[PASS] "</span><span class="special">:</span> <span class="string">"[FAIL] "</span> <span class="special">)</span>
|
|
|
|
|
|
|
|
<span class="special"><<</span> <span class="identifier">name</span><span class="special"><</span><span class="identifier">T1</span><span class="special">>()</span> <span class="special"><<</span> <span class="string">" + "</span> <span class="special"><<</span> <span class="identifier">name</span><span class="special"><</span><span class="identifier">T2</span><span class="special">>()</span> <span class="special"><<</span> <span class="string">" -> "</span> <span class="special"><<</span> <span class="identifier">name</span><span class="special"><</span><span class="identifier">T3</span><span class="special">>()</span> <span class="special"><<</span> <span class="string">", result: "</span> <span class="special"><<</span> <span class="identifier">name</span><span class="special"><</span><span class="identifier">T4</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>
|
|
|
|
<span class="special">}</span>
|
|
|
|
<span class="special">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
|
|
|
|
<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
|
|
|
@@ -707,7 +709,7 @@
|
|
|
|
<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span><span class="special">...></span> <span class="keyword">class</span> <span class="identifier">F</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">L</span><span class="special">></span> <span class="keyword">using</span> <span class="identifier">mp_apply</span> <span class="special">=</span> <span class="identifier">mp_rename</span><span class="special"><</span><span class="identifier">L</span><span class="special">,</span> <span class="identifier">F</span><span class="special">>;</span>
|
|
|
|
<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span><span class="special">...></span> <span class="keyword">class</span> <span class="identifier">F</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">L</span><span class="special">></span> <span class="keyword">using</span> <span class="identifier">mp_apply</span> <span class="special">=</span> <span class="identifier">mp_rename</span><span class="special"><</span><span class="identifier">L</span><span class="special">,</span> <span class="identifier">F</span><span class="special">>;</span>
|
|
|
|
</pre>
|
|
|
|
</pre>
|
|
|
|
<p>
|
|
|
|
<p>
|
|
|
|
<code class="computeroutput"><span class="identifier">mp_apply</span><span class="special"><</span><span class="identifier">F</span><span class="special">,</span> <span class="identifier">L</span><span class="special">></span></code> applies the function <code class="computeroutput"><span class="identifier">F</span></code> to the contents of the list <code class="computeroutput"><span class="identifier">L</span></code>, that is, <code class="computeroutput"><span class="identifier">mp_rename</span><span class="special"><</span><span class="identifier">F</span><span class="special">,</span> <span class="identifier">L</span><span class="special"><</span><span class="identifier">T</span><span class="special">...>></span></code>
|
|
|
|
<code class="computeroutput"><span class="identifier">mp_apply</span><span class="special"><</span><span class="identifier">F</span><span class="special">,</span> <span class="identifier">L</span><span class="special">></span></code> applies the metafunction <code class="computeroutput"><span class="identifier">F</span></code> to the contents of the list <code class="computeroutput"><span class="identifier">L</span></code>, that is, <code class="computeroutput"><span class="identifier">mp_rename</span><span class="special"><</span><span class="identifier">F</span><span class="special">,</span> <span class="identifier">L</span><span class="special"><</span><span class="identifier">T</span><span class="special">...>></span></code>
|
|
|
|
is an alias for <code class="computeroutput"><span class="identifier">F</span><span class="special"><</span><span class="identifier">T</span><span class="special">...></span></code>.
|
|
|
|
is an alias for <code class="computeroutput"><span class="identifier">F</span><span class="special"><</span><span class="identifier">T</span><span class="special">...></span></code>.
|
|
|
|
(<code class="computeroutput"><span class="identifier">mp_apply</span></code> is the same as
|
|
|
|
(<code class="computeroutput"><span class="identifier">mp_apply</span></code> is the same as
|
|
|
|
<code class="computeroutput"><span class="identifier">mp_rename</span></code> with the arguments
|
|
|
|
<code class="computeroutput"><span class="identifier">mp_rename</span></code> with the arguments
|
|
|
@@ -973,9 +975,8 @@
|
|
|
|
</pre>
|
|
|
|
</pre>
|
|
|
|
<p>
|
|
|
|
<p>
|
|
|
|
<code class="computeroutput"><span class="identifier">mp_transform_if</span><span class="special"><</span><span class="identifier">P</span><span class="special">,</span> <span class="identifier">F</span><span class="special">,</span> <span class="identifier">L1</span><span class="special">,</span> <span class="identifier">L2</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Ln</span><span class="special">></span></code>
|
|
|
|
<code class="computeroutput"><span class="identifier">mp_transform_if</span><span class="special"><</span><span class="identifier">P</span><span class="special">,</span> <span class="identifier">F</span><span class="special">,</span> <span class="identifier">L1</span><span class="special">,</span> <span class="identifier">L2</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Ln</span><span class="special">></span></code>
|
|
|
|
replaces the elements <code class="computeroutput"><span class="identifier">T</span></code>
|
|
|
|
replaces the elements of the list <code class="computeroutput"><span class="identifier">L1</span></code>
|
|
|
|
of the list <code class="computeroutput"><span class="identifier">L1</span></code> for which
|
|
|
|
for which <code class="computeroutput"><span class="identifier">mp_to_bool</span><span class="special"><</span><span class="identifier">P</span><span class="special"><</span><span class="identifier">T1</span><span class="special">,</span> <span class="identifier">T2</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Tn</span><span class="special">>></span></code> is <code class="computeroutput"><span class="identifier">mp_true</span></code>
|
|
|
|
<code class="computeroutput"><span class="identifier">mp_to_bool</span><span class="special"><</span><span class="identifier">P</span><span class="special"><</span><span class="identifier">T1</span><span class="special">,</span> <span class="identifier">T2</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Tn</span><span class="special">>></span></code> is <code class="computeroutput"><span class="identifier">mp_true</span></code>
|
|
|
|
|
|
|
|
with <code class="computeroutput"><span class="identifier">F</span><span class="special"><</span><span class="identifier">T1</span><span class="special">,</span> <span class="identifier">T2</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Tn</span><span class="special">></span></code>, and returns the result, where <code class="computeroutput"><span class="identifier">Ti</span></code> are the corresponding elements of
|
|
|
|
with <code class="computeroutput"><span class="identifier">F</span><span class="special"><</span><span class="identifier">T1</span><span class="special">,</span> <span class="identifier">T2</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Tn</span><span class="special">></span></code>, and returns the result, where <code class="computeroutput"><span class="identifier">Ti</span></code> are the corresponding elements of
|
|
|
|
<code class="computeroutput"><span class="identifier">Li</span></code>.
|
|
|
|
<code class="computeroutput"><span class="identifier">Li</span></code>.
|
|
|
|
</p>
|
|
|
|
</p>
|
|
|
@@ -1310,7 +1311,7 @@
|
|
|
|
is the zero-based index of the first element <code class="computeroutput"><span class="identifier">T</span></code>
|
|
|
|
is the zero-based index of the first element <code class="computeroutput"><span class="identifier">T</span></code>
|
|
|
|
in <code class="computeroutput"><span class="identifier">L</span></code> for which <code class="computeroutput"><span class="identifier">mp_to_bool</span><span class="special"><</span><span class="identifier">P</span><span class="special"><</span><span class="identifier">T</span><span class="special">>></span></code>
|
|
|
|
in <code class="computeroutput"><span class="identifier">L</span></code> for which <code class="computeroutput"><span class="identifier">mp_to_bool</span><span class="special"><</span><span class="identifier">P</span><span class="special"><</span><span class="identifier">T</span><span class="special">>></span></code>
|
|
|
|
is <code class="computeroutput"><span class="identifier">mp_true</span></code>. If there is
|
|
|
|
is <code class="computeroutput"><span class="identifier">mp_true</span></code>. If there is
|
|
|
|
no such element, <code class="computeroutput"><span class="identifier">mp_find</span><span class="special"><</span><span class="identifier">L</span><span class="special">,</span> <span class="identifier">V</span><span class="special">></span></code>
|
|
|
|
no such element, <code class="computeroutput"><span class="identifier">mp_find_if</span><span class="special"><</span><span class="identifier">L</span><span class="special">,</span> <span class="identifier">P</span><span class="special">></span></code>
|
|
|
|
is <code class="computeroutput"><span class="identifier">mp_size</span><span class="special"><</span><span class="identifier">L</span><span class="special">></span></code>.
|
|
|
|
is <code class="computeroutput"><span class="identifier">mp_size</span><span class="special"><</span><span class="identifier">L</span><span class="special">></span></code>.
|
|
|
|
</p>
|
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
@@ -1477,7 +1478,7 @@
|
|
|
|
<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">M</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">K</span><span class="special">></span> <span class="keyword">using</span> <span class="identifier">mp_map_contains</span> <span class="special">=</span> <span class="identifier">mp_not</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special"><</span><span class="identifier">mp_map_find</span><span class="special"><</span><span class="identifier">M</span><span class="special">,</span> <span class="identifier">K</span><span class="special">>,</span> <span class="keyword">void</span><span class="special">>>;</span>
|
|
|
|
<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">M</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">K</span><span class="special">></span> <span class="keyword">using</span> <span class="identifier">mp_map_contains</span> <span class="special">=</span> <span class="identifier">mp_not</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special"><</span><span class="identifier">mp_map_find</span><span class="special"><</span><span class="identifier">M</span><span class="special">,</span> <span class="identifier">K</span><span class="special">>,</span> <span class="keyword">void</span><span class="special">>>;</span>
|
|
|
|
</pre>
|
|
|
|
</pre>
|
|
|
|
<p>
|
|
|
|
<p>
|
|
|
|
<code class="computeroutput"><span class="identifier">mp_map_contains</span><span class="special"><</span><span class="identifier">M</span><span class="special">,</span> <span class="identifier">K</span><span class="special">></span></code> is <code class="computeroutput"><span class="identifier">mp_true</span></code>,
|
|
|
|
<code class="computeroutput"><span class="identifier">mp_map_contains</span><span class="special"><</span><span class="identifier">M</span><span class="special">,</span> <span class="identifier">K</span><span class="special">></span></code> is <code class="computeroutput"><span class="identifier">mp_true</span></code>
|
|
|
|
if the map <code class="computeroutput"><span class="identifier">M</span></code> contains an
|
|
|
|
if the map <code class="computeroutput"><span class="identifier">M</span></code> contains an
|
|
|
|
element with a key <code class="computeroutput"><span class="identifier">K</span></code>,
|
|
|
|
element with a key <code class="computeroutput"><span class="identifier">K</span></code>,
|
|
|
|
<code class="computeroutput"><span class="identifier">mp_false</span></code> otherwise.
|
|
|
|
<code class="computeroutput"><span class="identifier">mp_false</span></code> otherwise.
|
|
|
@@ -1705,7 +1706,7 @@
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
|
|
|
|
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
|
|
|
|
<td align="left"><p><small>Last revised: March 24, 2017 at 12:24:11 GMT</small></p></td>
|
|
|
|
<td align="left"><p><small>Last revised: March 25, 2017 at 01:01:08 GMT</small></p></td>
|
|
|
|
<td align="right"><div class="copyright-footer"></div></td>
|
|
|
|
<td align="right"><div class="copyright-footer"></div></td>
|
|
|
|
</tr></table>
|
|
|
|
</tr></table>
|
|
|
|
<hr>
|
|
|
|
<hr>
|
|
|
|