<!-- 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: registration.h File Reference</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="header"> <div class="summary"> <a href="#nested-classes">Classes</a> | <a href="#namespaces">Namespaces</a> | <a href="#define-members">Macros</a> | <a href="#func-members">Functions</a> </div> <div class="headertitle"> <div class="title">registration.h File Reference</div> </div> </div><!--header--> <div class="contents"> <div class="textblock"><code>#include "rttr/detail/base/core_prerequisites.h"</code><br /> <code>#include "<a class="el" href="policy_8h_source.html">rttr/policy.h</a>"</code><br /> <code>#include "<a class="el" href="access__levels_8h_source.html">rttr/access_levels.h</a>"</code><br /> <code>#include "rttr/detail/registration/bind_types.h"</code><br /> <code>#include "rttr/detail/registration/registration_executer.h"</code><br /> <code>#include "rttr/detail/default_arguments/default_arguments.h"</code><br /> <code>#include "rttr/detail/parameter_info/parameter_names.h"</code><br /> <code>#include "<a class="el" href="variant_8h_source.html">rttr/variant.h</a>"</code><br /> <code>#include "rttr/detail/registration/registration_impl.h"</code><br /> </div> <p><a href="registration_8h_source.html">Go to the source code of this file.</a></p> <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">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classrttr_1_1registration_1_1bind.html">rttr::registration::bind< T ></a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The <a class="el" href="classrttr_1_1registration_1_1bind.html">bind</a> class is used to chain registration calls. <a href="classrttr_1_1registration_1_1bind.html#details">More...</a><br /></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="classrttr_1_1registration_1_1bind.html">rttr::registration::bind< T ></a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The <a class="el" href="classrttr_1_1registration_1_1bind.html">bind</a> class is used to chain registration calls. <a href="classrttr_1_1registration_1_1bind.html#details">More...</a><br /></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="classrttr_1_1registration_1_1class__.html">rttr::registration::class_< Class_Type ></a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The <a class="el" href="classrttr_1_1registration_1_1class__.html">class_</a> is used to register classes to RTTR. <a href="classrttr_1_1registration_1_1class__.html#details">More...</a><br /></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="classrttr_1_1registration.html">rttr::registration</a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The <a class="el" href="classrttr_1_1registration.html">registration</a> class is the entry point for the manual registration of reflection information to the type system. <a href="classrttr_1_1registration.html#details">More...</a><br /></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="namespaces"></a> Namespaces</h2></td></tr> <tr class="memitem:namespacerttr"><td class="memItemLeft" align="right" valign="top">  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacerttr.html">rttr</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="define-members"></a> Macros</h2></td></tr> <tr class="memitem:acd4d632edb955a7664489ae6d90aa8bd"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="registration_8h.html#acd4d632edb955a7664489ae6d90aa8bd">RTTR_PLUGIN_REGISTRATION</a></td></tr> <tr class="memdesc:acd4d632edb955a7664489ae6d90aa8bd"><td class="mdescLeft"> </td><td class="mdescRight">Use this macro to automatically register your reflection information inside a plugin to RTTR. <a href="#acd4d632edb955a7664489ae6d90aa8bd">More...</a><br /></td></tr> <tr class="separator:acd4d632edb955a7664489ae6d90aa8bd"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac6326400f16225ee15b52eabcaae8130"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="registration_8h.html#ac6326400f16225ee15b52eabcaae8130">RTTR_REGISTRATION</a></td></tr> <tr class="memdesc:ac6326400f16225ee15b52eabcaae8130"><td class="mdescLeft"> </td><td class="mdescRight">Use this macro to automatically register your reflection information to RTTR before <code>main</code> is called. <a href="#ac6326400f16225ee15b52eabcaae8130">More...</a><br /></td></tr> <tr class="separator:ac6326400f16225ee15b52eabcaae8130"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a307051b21da56e1ec8a63f0aa943797e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="registration_8h.html#a307051b21da56e1ec8a63f0aa943797e">RTTR_REGISTRATION_FRIEND</a></td></tr> <tr class="memdesc:a307051b21da56e1ec8a63f0aa943797e"><td class="mdescLeft"> </td><td class="mdescRight">Place this macro inside a class, when you need to reflect properties, methods or constructors which are declared in <code>protected</code> or <code>private</code> scope of the class. <a href="#a307051b21da56e1ec8a63f0aa943797e">More...</a><br /></td></tr> <tr class="separator:a307051b21da56e1ec8a63f0aa943797e"><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:afdaed4515c436b34b8e24af714a09c64"><td class="memTemplParams" colspan="2">template<typename... TArgs> </td></tr> <tr class="memitem:afdaed4515c436b34b8e24af714a09c64"><td class="memTemplItemLeft" align="right" valign="top">detail::default_args< TArgs... > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerttr.html#afdaed4515c436b34b8e24af714a09c64">rttr::default_arguments</a> (TArgs &&...args)</td></tr> <tr class="memdesc:afdaed4515c436b34b8e24af714a09c64"><td class="mdescLeft"> </td><td class="mdescRight">The <a class="el" href="namespacerttr.html#afdaed4515c436b34b8e24af714a09c64">default_arguments</a> function should be used add default arguments, for <a class="el" href="classrttr_1_1constructor.html">constructors</a> or a <a class="el" href="classrttr_1_1method.html">methods</a> during the registration process of reflection information. <a href="namespacerttr.html#afdaed4515c436b34b8e24af714a09c64">More...</a><br /></td></tr> <tr class="separator:afdaed4515c436b34b8e24af714a09c64"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a2cd2b848b4d218241a8b6e8f7cdbeb93"><td class="memItemLeft" align="right" valign="top">detail::metadata </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacerttr.html#a2cd2b848b4d218241a8b6e8f7cdbeb93">rttr::metadata</a> (variant key, variant value)</td></tr> <tr class="memdesc:a2cd2b848b4d218241a8b6e8f7cdbeb93"><td class="mdescLeft"> </td><td class="mdescRight">The <a class="el" href="namespacerttr.html#a2cd2b848b4d218241a8b6e8f7cdbeb93">metadata</a> function can be used to add additional meta data information during the registration process of reflection information. <a href="namespacerttr.html#a2cd2b848b4d218241a8b6e8f7cdbeb93">More...</a><br /></td></tr> <tr class="separator:a2cd2b848b4d218241a8b6e8f7cdbeb93"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ab708b3893cbd5a10e8782f3825052ea6"><td class="memTemplParams" colspan="2">template<typename... TArgs> </td></tr> <tr class="memitem:ab708b3893cbd5a10e8782f3825052ea6"><td class="memTemplItemLeft" align="right" valign="top">detail::parameter_names< detail::decay_t< TArgs >... > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerttr.html#ab708b3893cbd5a10e8782f3825052ea6">rttr::parameter_names</a> (TArgs &&...args)</td></tr> <tr class="memdesc:ab708b3893cbd5a10e8782f3825052ea6"><td class="mdescLeft"> </td><td class="mdescRight">The <a class="el" href="namespacerttr.html#ab708b3893cbd5a10e8782f3825052ea6">parameter_names</a> function should be used add human-readable names of the parameters, for <a class="el" href="classrttr_1_1constructor.html">constructors</a> or a <a class="el" href="classrttr_1_1method.html">methods</a> during the registration process of reflection information. <a href="namespacerttr.html#ab708b3893cbd5a10e8782f3825052ea6">More...</a><br /></td></tr> <tr class="separator:ab708b3893cbd5a10e8782f3825052ea6"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ab5ab25763f38e207fba4461aeb307e4b"><td class="memTemplParams" colspan="2">template<typename ClassType , typename ReturnType , typename... Args> </td></tr> <tr class="memitem:ab5ab25763f38e207fba4461aeb307e4b"><td class="memTemplItemLeft" align="right" valign="top">auto </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerttr.html#ab5ab25763f38e207fba4461aeb307e4b">rttr::select_const</a> (ReturnType(ClassType::*func)(Args...) const) -> decltype(func)</td></tr> <tr class="memdesc:ab5ab25763f38e207fba4461aeb307e4b"><td class="mdescLeft"> </td><td class="mdescRight">This is a helper function to register overloaded const member functions. <a href="namespacerttr.html#ab5ab25763f38e207fba4461aeb307e4b">More...</a><br /></td></tr> <tr class="separator:ab5ab25763f38e207fba4461aeb307e4b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a8f3f8702a5c01a032921b5400dcf3a36"><td class="memTemplParams" colspan="2">template<typename ClassType , typename ReturnType , typename... Args> </td></tr> <tr class="memitem:a8f3f8702a5c01a032921b5400dcf3a36"><td class="memTemplItemLeft" align="right" valign="top">auto </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerttr.html#a8f3f8702a5c01a032921b5400dcf3a36">rttr::select_const</a> (ReturnType(ClassType::*func)(Args...) const noexcept) -> decltype(func)</td></tr> <tr class="memdesc:a8f3f8702a5c01a032921b5400dcf3a36"><td class="mdescLeft"> </td><td class="mdescRight">Overload with <code>noexcept</code> function type. <a href="namespacerttr.html#a8f3f8702a5c01a032921b5400dcf3a36">More...</a><br /></td></tr> <tr class="separator:a8f3f8702a5c01a032921b5400dcf3a36"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac2fe0add56b55e3ef993783060346d97"><td class="memTemplParams" colspan="2">template<typename ClassType , typename ReturnType , typename... Args> </td></tr> <tr class="memitem:ac2fe0add56b55e3ef993783060346d97"><td class="memTemplItemLeft" align="right" valign="top">auto </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerttr.html#ac2fe0add56b55e3ef993783060346d97">rttr::select_non_const</a> (ReturnType(ClassType::*func)(Args...)) -> decltype(func)</td></tr> <tr class="memdesc:ac2fe0add56b55e3ef993783060346d97"><td class="mdescLeft"> </td><td class="mdescRight">This is a helper function to register overloaded const member functions. <a href="namespacerttr.html#ac2fe0add56b55e3ef993783060346d97">More...</a><br /></td></tr> <tr class="separator:ac2fe0add56b55e3ef993783060346d97"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a824f220ed51f07da6f29d5ab9a121f04"><td class="memTemplParams" colspan="2">template<typename ClassType , typename ReturnType , typename... Args> </td></tr> <tr class="memitem:a824f220ed51f07da6f29d5ab9a121f04"><td class="memTemplItemLeft" align="right" valign="top">auto </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerttr.html#a824f220ed51f07da6f29d5ab9a121f04">rttr::select_non_const</a> (ReturnType(ClassType::*func)(Args...) noexcept) -> decltype(func)</td></tr> <tr class="memdesc:a824f220ed51f07da6f29d5ab9a121f04"><td class="mdescLeft"> </td><td class="mdescRight">Overload with <code>noexcept</code> function type. <a href="namespacerttr.html#a824f220ed51f07da6f29d5ab9a121f04">More...</a><br /></td></tr> <tr class="separator:a824f220ed51f07da6f29d5ab9a121f04"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a1582d7d5b803f7dd5498a4a0166d382d"><td class="memTemplParams" colspan="2">template<typename Signature > </td></tr> <tr class="memitem:a1582d7d5b803f7dd5498a4a0166d382d"><td class="memTemplItemLeft" align="right" valign="top">Signature * </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerttr.html#a1582d7d5b803f7dd5498a4a0166d382d">rttr::select_overload</a> (Signature *func)</td></tr> <tr class="memdesc:a1582d7d5b803f7dd5498a4a0166d382d"><td class="mdescLeft"> </td><td class="mdescRight">This is a helper function to register overloaded functions. <a href="namespacerttr.html#a1582d7d5b803f7dd5498a4a0166d382d">More...</a><br /></td></tr> <tr class="separator:a1582d7d5b803f7dd5498a4a0166d382d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a798f2d741400e53a74df3c80c4c0c887"><td class="memTemplParams" colspan="2">template<typename Signature , typename ClassType > </td></tr> <tr class="memitem:a798f2d741400e53a74df3c80c4c0c887"><td class="memTemplItemLeft" align="right" valign="top">auto </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerttr.html#a798f2d741400e53a74df3c80c4c0c887">rttr::select_overload</a> (Signature(ClassType::*func)) -> decltype(func)</td></tr> <tr class="memdesc:a798f2d741400e53a74df3c80c4c0c887"><td class="mdescLeft"> </td><td class="mdescRight">This is a helper function to register overloaded member functions. <a href="namespacerttr.html#a798f2d741400e53a74df3c80c4c0c887">More...</a><br /></td></tr> <tr class="separator:a798f2d741400e53a74df3c80c4c0c887"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a54ecd8bad715cbc451e7aa8491667d4a"><td class="memTemplParams" colspan="2">template<typename Enum_Type > </td></tr> <tr class="memitem:a54ecd8bad715cbc451e7aa8491667d4a"><td class="memTemplItemLeft" align="right" valign="top">detail::enum_data< Enum_Type > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerttr.html#a54ecd8bad715cbc451e7aa8491667d4a">rttr::value</a> (string_view, Enum_Type value)</td></tr> <tr class="memdesc:a54ecd8bad715cbc451e7aa8491667d4a"><td class="mdescLeft"> </td><td class="mdescRight">The <a class="el" href="namespacerttr.html#a54ecd8bad715cbc451e7aa8491667d4a">value</a> function should be used to add a mapping from enum <code>name</code> to <code>value</code> during the registration process of reflection information. <a href="namespacerttr.html#a54ecd8bad715cbc451e7aa8491667d4a">More...</a><br /></td></tr> <tr class="separator:a54ecd8bad715cbc451e7aa8491667d4a"><td class="memSeparator" colspan="2"> </td></tr> </table> <h2 class="groupheader">Macro Definition Documentation</h2> <a id="acd4d632edb955a7664489ae6d90aa8bd"></a> <h2 class="memtitle"><span class="permalink"><a href="#acd4d632edb955a7664489ae6d90aa8bd">◆ </a></span>RTTR_PLUGIN_REGISTRATION</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define RTTR_PLUGIN_REGISTRATION</td> </tr> </table> </div><div class="memdoc"> <p>Use this macro to automatically register your reflection information inside a plugin to RTTR. </p> <p>Use it in following way: </p><div class="fragment"><div class="line"><span class="keywordtype">int</span> some_method() { <span class="keywordflow">return</span> 42; }</div><div class="line"></div><div class="line"><a class="code" href="registration_8h.html#acd4d632edb955a7664489ae6d90aa8bd">RTTR_PLUGIN_REGISTRATION</a></div><div class="line">{</div><div class="line"> <a class="code" href="classrttr_1_1registration.html#a5da1c6eb947d700681faa7fec0bf23b7">rttr::registration::method</a>(<span class="stringliteral">"some_method"</span>, &some_method);</div><div class="line">}</div></div><!-- fragment --><p>Just place the macro in global scope in a cpp file.</p> <dl class="section remark"><dt>Remarks</dt><dd>It is not possible to place the macro multiple times in one cpp file. When you compile your plugin with the <code>gcc</code> toolchain, make sure you use the compiler option: <code>-fno-gnu-unique</code>. otherwise the unregistration will not work properly.</dd></dl> <dl class="section see"><dt>See also</dt><dd>library </dd></dl> </div> </div> <a id="ac6326400f16225ee15b52eabcaae8130"></a> <h2 class="memtitle"><span class="permalink"><a href="#ac6326400f16225ee15b52eabcaae8130">◆ </a></span>RTTR_REGISTRATION</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define RTTR_REGISTRATION</td> </tr> </table> </div><div class="memdoc"> <p>Use this macro to automatically register your reflection information to RTTR before <code>main</code> is called. </p> <p>Use it in following way: </p><div class="fragment"><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">rttr::registration::method</a>(<span class="stringliteral">"foo"</span>, &foo);</div><div class="line">}</div></div><!-- fragment --><p>Just place the macro in global scope in a cpp file.</p> <dl class="section remark"><dt>Remarks</dt><dd>It is not possible to place the macro multiple times in one cpp file. </dd></dl> </div> </div> <a id="a307051b21da56e1ec8a63f0aa943797e"></a> <h2 class="memtitle"><span class="permalink"><a href="#a307051b21da56e1ec8a63f0aa943797e">◆ </a></span>RTTR_REGISTRATION_FRIEND</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define RTTR_REGISTRATION_FRIEND</td> </tr> </table> </div><div class="memdoc"> <p>Place this macro inside a class, when you need to reflect properties, methods or constructors which are declared in <code>protected</code> or <code>private</code> scope of the class. </p> <div class="fragment"><div class="line"><span class="keyword">class </span>Foo</div><div class="line">{</div><div class="line"> <span class="keyword">private</span>:</div><div class="line"> <span class="keywordtype">int</span> m_value;</div><div class="line"></div><div class="line"> <a class="code" href="registration_8h.html#a307051b21da56e1ec8a63f0aa943797e">RTTR_REGISTRATION_FRIEND</a></div><div class="line">};</div></div><!-- fragment --><div class="fragment"><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_1_1class__.html">rttr::registration::class_<Foo></a>()</div><div class="line"> .<a class="code" href="classrttr_1_1registration_1_1class__.html#a005a60417fb6d183af475cb4059dc0a0">property</a>(<span class="stringliteral">"value"</span>, &Foo::m_value);</div><div class="line">}</div></div><!-- fragment --> </div> </div> </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>