<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.15"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>libstdc++: Binder Classes</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="navtree.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="resize.js"></script> <script type="text/javascript" src="navtreedata.js"></script> <script type="text/javascript" src="navtree.js"></script> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(document).ready(initResizable); /* @license-end */</script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td id="projectalign" style="padding-left: 0.5em;"> <div id="projectname">libstdc++ </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.15 --> </div><!-- top --> <div id="side-nav" class="ui-resizable side-nav-resizable"> <div id="nav-tree"> <div id="nav-tree-contents"> <div id="nav-sync" class="sync"></div> </div> </div> <div id="splitbar" style="-moz-user-select:none;" class="ui-resizable-handle"> </div> </div> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(document).ready(function(){initNavTree('a01510.html','');}); /* @license-end */ </script> <div id="doc-content"> <div class="header"> <div class="summary"> <a href="#namespaces">Namespaces</a> | <a href="#nested-classes">Classes</a> | <a href="#func-members">Functions</a> </div> <div class="headertitle"> <div class="title">Binder Classes<div class="ingroups"><a class="el" href="a01480.html">Utilities</a> » <a class="el" href="a01499.html">Function Objects</a></div></div> </div> </div><!--header--> <div class="contents"> <div class="dynheader"> Collaboration diagram for Binder Classes:</div> <div class="dyncontent"> <center><table><tr><td><div class="center"><iframe scrolling="no" frameborder="0" src="a01510.svg" width="278" height="35"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe> </div> </td></tr></table></center> </div> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a> Namespaces</h2></td></tr> <tr class="memitem:a01558"><td class="memItemLeft" align="right" valign="top">  </td><td class="memItemRight" valign="bottom"><a class="el" href="a01558.html">std::placeholders</a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> Classes</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a02103.html">std::_Placeholder< _Num ></a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a08463.html">std::binder1st< _Operation ></a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a08467.html">std::binder2nd< _Operation ></a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a02095.html">std::is_bind_expression< _Tp ></a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a02151.html">std::is_bind_expression< _Bind< _Signature > ></a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a02167.html">std::is_bind_expression< _Bind_result< _Result, _Signature > ></a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a02155.html">std::is_bind_expression< const _Bind< _Signature > ></a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a02171.html">std::is_bind_expression< const _Bind_result< _Result, _Signature > ></a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a02163.html">std::is_bind_expression< const volatile _Bind< _Signature > ></a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a02179.html">std::is_bind_expression< const volatile _Bind_result< _Result, _Signature > ></a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a02159.html">std::is_bind_expression< volatile _Bind< _Signature > ></a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a02175.html">std::is_bind_expression< volatile _Bind_result< _Result, _Signature > ></a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a02099.html">std::is_placeholder< _Tp ></a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a02107.html">std::is_placeholder< _Placeholder< _Num > ></a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> Functions</h2></td></tr> <tr class="memitem:ga7b2eddb726568256e49824ad01a05099"><td class="memTemplParams" colspan="2">template<typename _Func , typename... _BoundArgs> </td></tr> <tr class="memitem:ga7b2eddb726568256e49824ad01a05099"><td class="memTemplItemLeft" align="right" valign="top">_Bind_helper< __is_socketlike< _Func >::value, _Func, _BoundArgs... >::type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a01510.html#ga7b2eddb726568256e49824ad01a05099">std::bind</a> (_Func &&__f, _BoundArgs &&... __args)</td></tr> <tr class="separator:ga7b2eddb726568256e49824ad01a05099"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga4fdb8d8274eed4c834559925d8950769"><td class="memTemplParams" colspan="2">template<typename _Result , typename _Func , typename... _BoundArgs> </td></tr> <tr class="memitem:ga4fdb8d8274eed4c834559925d8950769"><td class="memTemplItemLeft" align="right" valign="top">_Bindres_helper< _Result, _Func, _BoundArgs... >::type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a01510.html#ga4fdb8d8274eed4c834559925d8950769">std::bind</a> (_Func &&__f, _BoundArgs &&... __args)</td></tr> <tr class="separator:ga4fdb8d8274eed4c834559925d8950769"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaa2f509629443172a7077bcf2cd7c9086"><td class="memTemplParams" colspan="2">template<typename _Operation , typename _Tp > </td></tr> <tr class="memitem:gaa2f509629443172a7077bcf2cd7c9086"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="a08463.html">binder1st</a>< _Operation > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a01510.html#gaa2f509629443172a7077bcf2cd7c9086">std::bind1st</a> (const _Operation &__fn, const _Tp &__x)</td></tr> <tr class="separator:gaa2f509629443172a7077bcf2cd7c9086"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga8560a0e4e830e060d38c043f8db37681"><td class="memTemplParams" colspan="2">template<typename _Operation , typename _Tp > </td></tr> <tr class="memitem:ga8560a0e4e830e060d38c043f8db37681"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="a08467.html">binder2nd</a>< _Operation > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a01510.html#ga8560a0e4e830e060d38c043f8db37681">std::bind2nd</a> (const _Operation &__fn, const _Tp &__x)</td></tr> <tr class="separator:ga8560a0e4e830e060d38c043f8db37681"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <p>Binders turn functions/functors with two arguments into functors with a single argument, storing an argument to be applied later. For example, a variable <code>B</code> of type <code>binder1st</code> is constructed from a functor <code>f</code> and an argument <code>x</code>. Later, B's <code>operator()</code> is called with a single argument <code>y</code>. The return value is the value of <code>f(x,y)</code>. <code>B</code> can be <em>called</em> with various arguments (y1, y2, ...) and will in turn call <code>f(x,y1)</code>, <code>f(x,y2)</code>, ...</p> <p>The function <code>bind1st</code> is provided to save some typing. It takes the function and an argument as parameters, and returns an instance of <code>binder1st</code>.</p> <p>The type <code>binder2nd</code> and its creator function <code>bind2nd</code> do the same thing, but the stored argument is passed as the second parameter instead of the first, e.g., <code>bind2nd</code>(std::minus<float>(),1.3) will create a functor whose <code>operator()</code> accepts a floating-point number, subtracts 1.3 from it, and returns the result. (If <code>bind1st</code> had been used, the functor would perform <em>1.3 - x</em> instead.</p> <p>Creator-wrapper functions like <code>bind1st</code> are intended to be used in calling algorithms. Their return values will be temporary objects. (The goal is to not require you to type names like <code>std::binder1st<std::plus<int>></code> for declaring a variable to hold the return value from <code>bind1st(std::plus<int>(),5)</code>.</p> <p>These become more useful when combined with the composition functions.</p> <p>These functions are deprecated in C++11 and can be replaced by <code>std::bind</code> (or <code>std::tr1::bind</code>) which is more powerful and flexible, supporting functions with any number of arguments. Uses of <code>bind1st</code> can be replaced by <code>std::bind(f, x, std::placeholders::_1)</code> and <code>bind2nd</code> by <code>std::bind(f, std::placeholders::_1, x)</code>. </p> <h2 class="groupheader">Function Documentation</h2> <a id="ga7b2eddb726568256e49824ad01a05099"></a> <h2 class="memtitle"><span class="permalink"><a href="#ga7b2eddb726568256e49824ad01a05099">◆ </a></span>bind() <span class="overload">[1/2]</span></h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<typename _Func , typename... _BoundArgs> </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">_Bind_helper<__is_socketlike<_Func>::value, _Func, _BoundArgs...>::type std::bind </td> <td>(</td> <td class="paramtype">_Func && </td> <td class="paramname"><em>__f</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">_BoundArgs &&... </td> <td class="paramname"><em>__args</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Function template for std::bind. </p> <p class="definition">Definition at line <a class="el" href="a00071_source.html#l00808">808</a> of file <a class="el" href="a00071_source.html">functional</a>.</p> </div> </div> <a id="ga4fdb8d8274eed4c834559925d8950769"></a> <h2 class="memtitle"><span class="permalink"><a href="#ga4fdb8d8274eed4c834559925d8950769">◆ </a></span>bind() <span class="overload">[2/2]</span></h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<typename _Result , typename _Func , typename... _BoundArgs> </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">_Bindres_helper<_Result, _Func, _BoundArgs...>::type std::bind </td> <td>(</td> <td class="paramtype">_Func && </td> <td class="paramname"><em>__f</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">_BoundArgs &&... </td> <td class="paramname"><em>__args</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Function template for std::bind<R>. </p> <p class="definition">Definition at line <a class="el" href="a00071_source.html#l00832">832</a> of file <a class="el" href="a00071_source.html">functional</a>.</p> </div> </div> <a id="gaa2f509629443172a7077bcf2cd7c9086"></a> <h2 class="memtitle"><span class="permalink"><a href="#gaa2f509629443172a7077bcf2cd7c9086">◆ </a></span>bind1st()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<typename _Operation , typename _Tp > </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname"><a class="el" href="a08463.html">binder1st</a><_Operation> std::bind1st </td> <td>(</td> <td class="paramtype">const _Operation & </td> <td class="paramname"><em>__fn</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const _Tp & </td> <td class="paramname"><em>__x</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>One of the <a class="el" href="a01510.html">binder functors</a>. </p> <p class="definition">Definition at line <a class="el" href="a00728_source.html#l00135">135</a> of file <a class="el" href="a00728_source.html">binders.h</a>.</p> </div> </div> <a id="ga8560a0e4e830e060d38c043f8db37681"></a> <h2 class="memtitle"><span class="permalink"><a href="#ga8560a0e4e830e060d38c043f8db37681">◆ </a></span>bind2nd()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<typename _Operation , typename _Tp > </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname"><a class="el" href="a08467.html">binder2nd</a><_Operation> std::bind2nd </td> <td>(</td> <td class="paramtype">const _Operation & </td> <td class="paramname"><em>__fn</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const _Tp & </td> <td class="paramname"><em>__x</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>One of the <a class="el" href="a01510.html">binder functors</a>. </p> <p class="definition">Definition at line <a class="el" href="a00728_source.html#l00170">170</a> of file <a class="el" href="a00728_source.html">binders.h</a>.</p> </div> </div> </div><!-- contents --> </div><!-- doc-content --> <!-- start footer part --> <div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> <ul> <li class="footer">Generated by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li> </ul> </div> </body> </html>