<!-- HTML header for doxygen 1.8.8--> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- For Mobile Devices --> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta name="generator" content="Doxygen 1.8.15"/> <script type="text/javascript" src="jquery.min.js"></script> <title>rttr: Default Arguments</title> <!--<link href="tabs.css" rel="stylesheet" type="text/css"/>--> <script type="text/javascript" src="dynsections.js"></script> <link rel = "shortcut icon" type = "image/x-icon" href = "favicon.ico"> <link rel = "stylesheet" href = "fonts/ptsans_regular_macroman/stylesheet.css"> <link rel = "stylesheet" href = "fonts/source_code_pro_regular/stylesheet.css"> <link href="doxygen.css" rel="stylesheet" type="text/css" /> <link href="custom-doxygen.css" rel="stylesheet" type="text/css"/> <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="custom-bootstrap.css"> <script src="bootstrap/js/bootstrap.min.js"></script> <script type="text/javascript" src="doxy-boot.js"></script> </head> <body> <!-- <nav class="navbar navbar-default" role="navigation"> <div class="container"> <div class="navbar-header"> <a class="navbar-brand">rttr 0.9.6</a> </div> </div> </nav> --> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div class="content" id="content"> <div class="container"> <div class="row"> <div class="col-sm-12 panel panel-default" style="padding-bottom: 15px;"> <div style="margin-bottom: 15px;"> <!-- end header part --> <!-- Generated by Doxygen 1.8.15 --> <script type="text/javascript" src="menudata.js"></script> <script type="text/javascript" src="menu.js"></script> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(function() { initMenu('',false,false,'search.php','Search'); }); /* @license-end */</script> <div id="main-nav"></div> </div><!-- top --> <div class="PageDoc"><div class="header"> <div class="headertitle"> <div class="title">Default Arguments </div> </div> </div><!--header--> <div class="contents"> <div class="textblock"><p>When you want to register a <a class="el" href="classrttr_1_1method.html">method</a> or a <a class="el" href="classrttr_1_1constructor.html">constructor</a> which contains default arguments, you have to provide them RTTR explicitly. The reason for this is, default arguments are not part of the function signature. Nevertheless, RTTR provides a mechanism to register functions with default arguments.</p> <p>Please take a look at following example:</p> <div class="fragment"><div class="line"><span class="keyword">using namespace </span><a class="code" href="namespacerttr.html">rttr</a>;</div><div class="line"></div><div class="line"><span class="keywordtype">void</span> my_function(<span class="keywordtype">int</span> a, <span class="keywordtype">bool</span> b, <span class="keyword">const</span> std::string& text, <span class="keyword">const</span> <span class="keywordtype">int</span>* ptr);</div><div class="line"></div><div class="line"><a class="code" href="registration_8h.html#ac6326400f16225ee15b52eabcaae8130">RTTR_REGISTRATION</a></div><div class="line">{</div><div class="line"> <a class="code" href="classrttr_1_1registration.html#a5da1c6eb947d700681faa7fec0bf23b7">registration::method</a>(<span class="stringliteral">"my_function"</span>, &my_function) </div><div class="line"> (</div><div class="line"> <a class="code" href="namespacerttr.html#afdaed4515c436b34b8e24af714a09c64">default_arguments</a>(<span class="keyword">true</span>, std::string(<span class="stringliteral">"default text"</span>), <span class="keyword">nullptr</span>)</div><div class="line"> );</div><div class="line">}</div></div><!-- fragment --><p>The default arguments has to be provided via the function: <a class="el" href="namespacerttr.html#afdaed4515c436b34b8e24af714a09c64">default_arguments()</a>. Place the call in the <code>()</code> operator of the returned <a class="el" href="classrttr_1_1registration_1_1bind.html">bind</a> object.</p> <p>The function has following synopsis: </p><div class="fragment"><div class="line"><span class="keyword">template</span><<span class="keyword">typename</span>...TArgs></div><div class="line">detail::default_args<TArgs...> <a class="code" href="namespacerttr.html#afdaed4515c436b34b8e24af714a09c64">default_arguments</a>(TArgs&&...args)</div></div><!-- fragment --><p> The values will be copied internally and will be provided during invoke of the method or constructor, when the corresponding argument is missing:</p> <div class="fragment"><div class="line"><span class="keywordtype">int</span> main()</div><div class="line">{</div><div class="line"> <span class="keyword">using namespace </span><a class="code" href="namespacerttr.html">rttr</a>;</div><div class="line"> <a class="code" href="classrttr_1_1method.html">method</a> meth = <a class="code" href="classrttr_1_1type.html#a15fa4ae4fb0619be68c3b83967fefb51">type::get_global_method</a>(<span class="stringliteral">"my_function"</span>);</div><div class="line"> <span class="comment">// the default values: 'true', 'std::string("default text"'), 'nullptr' will be forwarded by RTTR automatically</span></div><div class="line"> <a class="code" href="classrttr_1_1variant.html">variant</a> var = meth.<a class="code" href="classrttr_1_1method.html#aea4351075b4cbe6f2f2b6500cf226f20">invoke</a>(<a class="code" href="classrttr_1_1instance.html">instance</a>(), 23);</div><div class="line"> std::cout << var.<a class="code" href="classrttr_1_1variant.html#aed6e6a2e29b4d1ac51a09b7d9037dd44">is_valid</a>(); <span class="comment">// prints 'true'</span></div><div class="line"></div><div class="line"> <span class="comment">// the default value: 'nullptr' will be forwarded by RTTR automatically</span></div><div class="line"> var = meth.<a class="code" href="classrttr_1_1method.html#aea4351075b4cbe6f2f2b6500cf226f20">invoke</a>(<a class="code" href="classrttr_1_1instance.html">instance</a>(), 23, <span class="keyword">true</span>, std::string(<span class="stringliteral">"text"</span>));</div><div class="line"> std::cout << var.<a class="code" href="classrttr_1_1variant.html#aed6e6a2e29b4d1ac51a09b7d9037dd44">is_valid</a>(); <span class="comment">// prints 'true'</span></div><div class="line">}</div></div><!-- fragment --><dl class="section remark"><dt>Remarks</dt><dd>The given arguments must match the signature from the starting position to the right most argument.</dd></dl> <p>The following snippet will <b>not</b> compile and will raise a <em>static_assert</em>: </p><div class="fragment"><div class="line"><span class="keyword">using namespace </span><a class="code" href="namespacerttr.html">rttr</a>;</div><div class="line"></div><div class="line"><span class="keywordtype">void</span> my_function(<span class="keywordtype">int</span> a, <span class="keywordtype">bool</span> b, <span class="keyword">const</span> std::string& text, <span class="keyword">const</span> <span class="keywordtype">int</span>* ptr);</div><div class="line"></div><div class="line"><a class="code" href="registration_8h.html#ac6326400f16225ee15b52eabcaae8130">RTTR_REGISTRATION</a></div><div class="line">{</div><div class="line"> <a class="code" href="classrttr_1_1registration.html#a5da1c6eb947d700681faa7fec0bf23b7">registration::method</a>(<span class="stringliteral">"my_function"</span>, &my_function) </div><div class="line"> (</div><div class="line"> <a class="code" href="namespacerttr.html#afdaed4515c436b34b8e24af714a09c64">default_arguments</a>(std::string(<span class="stringliteral">"default text"</span>)) <span class="comment">// default value for "ptr" not given</span></div><div class="line"> );</div><div class="line">}</div></div><!-- fragment --><p>Every <a class="el" href="classrttr_1_1method.html">method</a> and <a class="el" href="classrttr_1_1constructor.html">constructor</a> can have default arguments.</p> <hr/> <div type="button" class="btn btn-default doxy-button"><a class="el" href="register_metadata_page.html">previous</a></div><div class="btn btn-default doxy-button"><a class="el" href="parameter_names_page.html">next</a></div> </div></div><!-- PageDoc --> </div><!-- contents --> <!-- HTML footer for doxygen 1.8.9.1--> <!-- start footer part --> <hr class="footer"/> <address class="footer"> <small> Generated on Thu Apr 11 2019 20:05:57 for rttr - 0.9.6 by <a href="http://www.doxygen.org/index.html">doxygen</a>. </small> </address> </body> </html>