<div class="gmail_quote">On Thu, Feb 9, 2012 at 5:46 PM, Bill Buklis <span dir="ltr">&lt;<a href="mailto:boostusr@pbjzone.com">boostusr@pbjzone.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Is there any facility to perform arithmetic operations on a tuple?<br>
<br>
For example:<br>
<br>
 � �struct data<br>
 � �{<br>
 � � � �double � �a, b;<br>
 � �};<br>
<br>
 � �data � �d1 = {1.0, 2.0};<br>
 � �data � �d2 = {2.5, 5.5};<br>
<br>
 � �// These two lines are not valid, but simulate what I want.<br>
 � �boost::tie(d1.a, d1.b) *= 10.0; � � � �// Multiply each element by 10.0<br>
 � �boost::tie(d1.a, d1.b) += boost::tie(d2.a, d2.b); � �// Add the elements from the second object<br>
<br>
After calculations, d1 should equal {12.5, 25.5};<br></blockquote><div><br>Boost.Fusion + Boost.Phoenix *might* be what you&#39;re looking for, but I don&#39;t know.<br><br>Specifically, boost::fusion::for_each [1] lets you iterate over a tuple and apply a (polymorphic) function to each element; that function can be built inline using Boost.Phoenix. E.g., (untested)<br>
<br>boost::fusion::for_each(d1, boost::phoenix::arg_names::_1 *= 10.0);<br><br>Your second example above might be a bit more verbose using these techniques. Check out also boost::fusion::transform [2] and, maybe, boost::fusion::zip_view [3]? Also, you&#39;ll have to adapt [4] your data struct to be recognizable as a Boost.Fusion sequence.<br>
<br>[1] <a href="http://www.boost.org/doc/libs/1_48_0/libs/fusion/doc/html/fusion/algorithm/iteration/functions/for_each.html">http://www.boost.org/doc/libs/1_48_0/libs/fusion/doc/html/fusion/algorithm/iteration/functions/for_each.html</a><br>
[2] <a href="http://www.boost.org/doc/libs/1_48_0/libs/fusion/doc/html/fusion/algorithm/transformation/functions/transform.html">http://www.boost.org/doc/libs/1_48_0/libs/fusion/doc/html/fusion/algorithm/transformation/functions/transform.html</a><br>
[3] <a href="http://www.boost.org/doc/libs/1_48_0/libs/fusion/doc/html/fusion/view/zip_view.html">http://www.boost.org/doc/libs/1_48_0/libs/fusion/doc/html/fusion/view/zip_view.html</a><br>[4] <a href="http://www.boost.org/doc/libs/1_48_0/libs/fusion/doc/html/fusion/adapted/adapt_struct.html">http://www.boost.org/doc/libs/1_48_0/libs/fusion/doc/html/fusion/adapted/adapt_struct.html</a><br>
<br>- Jeff<br><br></div></div>