1<?xml version="1.0" encoding="utf-8" ?> 2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 4<!-- Copyright Aleksey Gurtovoy 2006. Distributed under the Boost --> 5<!-- Software License, Version 1.0. (See accompanying --> 6<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> 7<head> 8<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 9<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" /> 10<title>THE BOOST MPL LIBRARY: Metafunction Composition</title> 11<link rel="stylesheet" href="../style.css" type="text/css" /> 12</head> 13<body class="docframe"> 14<table class="header"><tr class="header"><td class="header-group navigation-bar"><span class="navigation-group"><a href="./partial-metafunction.html" class="navigation-link">Prev</a> <a href="./lambda-details.html" class="navigation-link">Next</a></span><span class="navigation-group-separator"> | </span><span class="navigation-group"><a href="./partial-metafunction.html" class="navigation-link">Back</a> Along</span><span class="navigation-group-separator"> | </span><span class="navigation-group"><a href="./more-lambda-capabilities.html" class="navigation-link">Up</a> <a href="../index.html" class="navigation-link">Home</a></span><span class="navigation-group-separator"> | </span><span class="navigation-group"><a href="./tutorial_toc.html" class="navigation-link">Full TOC</a></span></td> 15<td class="header-group page-location"><a href="../index.html" class="navigation-link">Front Page</a> / <a href="./tutorial-metafunctions.html" class="navigation-link">Tutorial: Metafunctions and Higher-Order Metaprogramming</a> / <a href="./more-lambda-capabilities.html" class="navigation-link">More Lambda Capabilities</a> / <a href="./metafunction-composition.html" class="navigation-link">Metafunction Composition</a></td> 16</tr></table><div class="header-separator"></div> 17<div class="section" id="metafunction-composition"> 18<h1><a class="toc-backref" href="./more-lambda-capabilities.html#id53" name="metafunction-composition">Metafunction Composition</a></h1> 19<p>Lambda expressions can also be used to assemble more interesting 20computations from simple metafunctions. For example, the following 21expression, which multiplies the sum of two numbers by their 22difference, is a <strong>composition</strong> of the three metafunctions <tt class="literal"><span class="pre">multiplies</span></tt>, 23<tt class="literal"><span class="pre">plus</span></tt>, and <tt class="literal"><span class="pre">minus</span></tt>:</p> 24<pre class="literal-block"> 25mpl::multiplies<mpl::plus<_1,_2>, mpl::minus<_1,_2> > 26</pre> 27<!-- @ example.wrap(apply_test[0], 28 ', mpl::int_<5>,mpl::int_<3>' + apply_test[1] % 16) 29# Can't exactly justify this yet, but there's no way to get 30# it into the text 31prefix += ['#include <boost/mpl/multiplies.hpp>'] 32compile() --> 33<p>When evaluating a lambda expression, MPL checks to see if any of its 34arguments are themselves lambda expressions, and evaluates each one 35that it finds. The results of these inner evaluations are substituted 36into the outer expression before it is evaluated.</p> 37</div> 38 39<div class="footer-separator"></div> 40<table class="footer"><tr class="footer"><td class="header-group navigation-bar"><span class="navigation-group"><a href="./partial-metafunction.html" class="navigation-link">Prev</a> <a href="./lambda-details.html" class="navigation-link">Next</a></span><span class="navigation-group-separator"> | </span><span class="navigation-group"><a href="./partial-metafunction.html" class="navigation-link">Back</a> Along</span><span class="navigation-group-separator"> | </span><span class="navigation-group"><a href="./more-lambda-capabilities.html" class="navigation-link">Up</a> <a href="../index.html" class="navigation-link">Home</a></span><span class="navigation-group-separator"> | </span><span class="navigation-group"><a href="./tutorial_toc.html" class="navigation-link">Full TOC</a></span></td> 41</tr></table></body> 42</html> 43