<div class="gmail_quote">On Thu, Feb 9, 2012 at 5:46 PM, Bill Buklis <span dir="ltr"><<a href="mailto:boostusr@pbjzone.com">boostusr@pbjzone.com</a>></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're looking for, but I don'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'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>