cereal/assets/doxygen/polymorphic__impl_8hpp.html
2022-02-27 19:48:38 -08:00

302 lines
26 KiB
HTML

<!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.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>cereal: polymorphic_impl.hpp File Reference</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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></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">cereal
</div>
<div id="projectbrief">A C++11 library for serialization</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<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&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_d445d0c097210746bce3afd9a77bcad9.html">cereal</a></li><li class="navelem"><a class="el" href="dir_68487379e3503fe9d657f67af15dc5dc.html">details</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">polymorphic_impl.hpp File Reference<div class="ingroups"><a class="el" href="group__Internal.html">Internal Functionality</a></div></div> </div>
</div><!--header-->
<div class="contents">
<p>Internal polymorphism support.
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;<a class="el" href="polymorphic__impl__fwd_8hpp_source.html">cereal/details/polymorphic_impl_fwd.hpp</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="static__object_8hpp_source.html">cereal/details/static_object.hpp</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="memory_8hpp_source.html">cereal/types/memory.hpp</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="string_8hpp_source.html">cereal/types/string.hpp</a>&quot;</code><br />
<code>#include &lt;functional&gt;</code><br />
<code>#include &lt;typeindex&gt;</code><br />
<code>#include &lt;map&gt;</code><br />
<code>#include &lt;limits&gt;</code><br />
<code>#include &lt;set&gt;</code><br />
<code>#include &lt;stack&gt;</code><br />
</div>
<p><a href="polymorphic__impl_8hpp_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">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1PolymorphicCaster.html">cereal::detail::PolymorphicCaster</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Base type for polymorphic void casting. <a href="structcereal_1_1detail_1_1PolymorphicCaster.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1PolymorphicCasters.html">cereal::detail::PolymorphicCasters</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Holds registered mappings between base and derived types for casting. <a href="structcereal_1_1detail_1_1PolymorphicCasters.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1PolymorphicVirtualCaster.html">cereal::detail::PolymorphicVirtualCaster&lt; Base, Derived &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Strongly typed derivation of <a class="el" href="structcereal_1_1detail_1_1PolymorphicCaster.html" title="Base type for polymorphic void casting.">PolymorphicCaster</a>. <a href="structcereal_1_1detail_1_1PolymorphicVirtualCaster.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1RegisterPolymorphicCaster.html">cereal::detail::RegisterPolymorphicCaster&lt; Base, Derived &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Registers a polymorphic casting relation between a Base and Derived type. <a href="structcereal_1_1detail_1_1RegisterPolymorphicCaster.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1binding__name.html">cereal::detail::binding_name&lt; T &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Binds a compile time type with a user defined string. <a href="structcereal_1_1detail_1_1binding__name.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1OutputBindingMap.html">cereal::detail::OutputBindingMap&lt; Archive &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A structure holding a map from type_indices to output serializer functions. <a href="structcereal_1_1detail_1_1OutputBindingMap.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1OutputBindingMap_1_1Serializers.html">cereal::detail::OutputBindingMap&lt; Archive &gt;::Serializers</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Struct containing the serializer functions for all pointer types. <a href="structcereal_1_1detail_1_1OutputBindingMap_1_1Serializers.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1EmptyDeleter.html">cereal::detail::EmptyDeleter&lt; T &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An empty noop deleter. <a href="structcereal_1_1detail_1_1EmptyDeleter.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1InputBindingMap.html">cereal::detail::InputBindingMap&lt; Archive &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A structure holding a map from type name strings to input serializer functions. <a href="structcereal_1_1detail_1_1InputBindingMap.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1InputBindingMap_1_1Serializers.html">cereal::detail::InputBindingMap&lt; Archive &gt;::Serializers</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Struct containing the serializer functions for all pointer types. <a href="structcereal_1_1detail_1_1InputBindingMap_1_1Serializers.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1InputBindingCreator.html">cereal::detail::InputBindingCreator&lt; Archive, T &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a binding (map entry) between an input archive type and a polymorphic type. <a href="structcereal_1_1detail_1_1InputBindingCreator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1OutputBindingCreator.html">cereal::detail::OutputBindingCreator&lt; Archive, T &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a binding (map entry) between an output archive type and a polymorphic type. <a href="structcereal_1_1detail_1_1OutputBindingCreator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcereal_1_1detail_1_1OutputBindingCreator_1_1PolymorphicSharedPointerWrapper.html">cereal::detail::OutputBindingCreator&lt; Archive, T &gt;::PolymorphicSharedPointerWrapper</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Holds a properly typed shared_ptr to the polymorphic type. <a href="classcereal_1_1detail_1_1OutputBindingCreator_1_1PolymorphicSharedPointerWrapper.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1adl__tag.html">cereal::detail::adl_tag</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1create__bindings.html">cereal::detail::create_bindings&lt; Archive, T &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Causes the static object bindings between an archive type and a serializable type T. <a href="structcereal_1_1detail_1_1create__bindings.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1instantiate__function.html">cereal::detail::instantiate_function&lt;&gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">When specialized, causes the compiler to instantiate its parameter. <a href="structcereal_1_1detail_1_1instantiate__function.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1polymorphic__serialization__support.html">cereal::detail::polymorphic_serialization_support&lt; Archive, T &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1bind__to__archives.html">cereal::detail::bind_to_archives&lt; T, Tag &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Begins the binding process of a type to all registered archives. <a href="structcereal_1_1detail_1_1bind__to__archives.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1init__binding.html">cereal::detail::init_binding&lt; T, Tag &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Used to hide the static object used to bind T to registered archives. <a href="structcereal_1_1detail_1_1init__binding.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</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:a447a2becefa10fee587b8cd1d04c7dfc"><td class="memItemLeft" align="right" valign="top"><a id="a447a2becefa10fee587b8cd1d04c7dfc"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="polymorphic__impl_8hpp.html#a447a2becefa10fee587b8cd1d04c7dfc">CEREAL_BIND_TO_ARCHIVES_UNUSED_FUNCTION</a>&#160;&#160;&#160;static void unused() { (void)b; }</td></tr>
<tr class="memdesc:a447a2becefa10fee587b8cd1d04c7dfc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Helper macro to omit unused warning. <br /></td></tr>
<tr class="separator:a447a2becefa10fee587b8cd1d04c7dfc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1287e4a45e8a9ce5d50d65c122d49d5f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="polymorphic__impl_8hpp.html#a1287e4a45e8a9ce5d50d65c122d49d5f">CEREAL_BIND_TO_ARCHIVES</a>(...)</td></tr>
<tr class="memdesc:a1287e4a45e8a9ce5d50d65c122d49d5f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Binds a polymorhic type to all registered archives. <a href="polymorphic__impl_8hpp.html#a1287e4a45e8a9ce5d50d65c122d49d5f">More...</a><br /></td></tr>
<tr class="separator:a1287e4a45e8a9ce5d50d65c122d49d5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aebe09f7b847560c8d63b9224008001df"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="polymorphic__impl_8hpp.html#aebe09f7b847560c8d63b9224008001df">UNREGISTERED_POLYMORPHIC_CAST_EXCEPTION</a>(LoadSave)</td></tr>
<tr class="memdesc:aebe09f7b847560c8d63b9224008001df"><td class="mdescLeft">&#160;</td><td class="mdescRight">Error message used for unregistered polymorphic casts. <a href="polymorphic__impl_8hpp.html#aebe09f7b847560c8d63b9224008001df">More...</a><br /></td></tr>
<tr class="separator:aebe09f7b847560c8d63b9224008001df"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a097903abd43faaf5d77e23eafbb5a1b0"><td class="memItemLeft" align="right" valign="top"><a id="a097903abd43faaf5d77e23eafbb5a1b0"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>CEREAL_EMPLACE_MAP</b>(map, key, value)&#160;&#160;&#160;map.emplace( key, value );</td></tr>
<tr class="separator:a097903abd43faaf5d77e23eafbb5a1b0"><td class="memSeparator" colspan="2">&#160;</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:a9c34d32da6bee20cb6609e78efc69174"><td class="memTemplParams" colspan="2">template&lt;class T , typename BindingTag &gt; </td></tr>
<tr class="memitem:a9c34d32da6bee20cb6609e78efc69174"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="polymorphic__impl_8hpp.html#a9c34d32da6bee20cb6609e78efc69174">cereal::detail::instantiate_polymorphic_binding</a> (T *, int, BindingTag, adl_tag)</td></tr>
<tr class="memdesc:a9c34d32da6bee20cb6609e78efc69174"><td class="mdescLeft">&#160;</td><td class="mdescRight">Base case overload for instantiation. <a href="polymorphic__impl_8hpp.html#a9c34d32da6bee20cb6609e78efc69174">More...</a><br /></td></tr>
<tr class="separator:a9c34d32da6bee20cb6609e78efc69174"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Internal polymorphism support. </p>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a id="a1287e4a45e8a9ce5d50d65c122d49d5f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1287e4a45e8a9ce5d50d65c122d49d5f">&#9670;&nbsp;</a></span>CEREAL_BIND_TO_ARCHIVES</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define CEREAL_BIND_TO_ARCHIVES</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>...</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"> <span class="keyword">namespace </span>cereal { \</div>
<div class="line"> namespace detail { \</div>
<div class="line"> template&lt;&gt; \</div>
<div class="line"> struct init_binding&lt;__VA_ARGS__&gt; { \</div>
<div class="line"> static bind_to_archives&lt;__VA_ARGS__&gt; <span class="keyword">const</span>&amp; b; \</div>
<div class="line"> CEREAL_BIND_TO_ARCHIVES_UNUSED_FUNCTION \</div>
<div class="line"> }; \</div>
<div class="line"> bind_to_archives&lt;__VA_ARGS__&gt; <span class="keyword">const</span> &amp; init_binding&lt;__VA_ARGS__&gt;::b = \</div>
<div class="line"> <a class="code" href="classcereal_1_1detail_1_1StaticObject.html">::cereal::detail::StaticObject</a>&lt; \</div>
<div class="line"> bind_to_archives&lt;__VA_ARGS__&gt; \</div>
<div class="line"> &gt;::getInstance().bind(); \</div>
<div class="line"> }} <span class="comment">/* end namespaces */</span></div>
</div><!-- fragment -->
<p>Binds a polymorhic type to all registered archives. </p>
<p>This binds a polymorphic type to all compatible registered archives that have been registered with CEREAL_REGISTER_ARCHIVE. This must be called after all archives are registered (usually after the archives themselves have been included). </p>
</div>
</div>
<a id="aebe09f7b847560c8d63b9224008001df"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aebe09f7b847560c8d63b9224008001df">&#9670;&nbsp;</a></span>UNREGISTERED_POLYMORPHIC_CAST_EXCEPTION</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define UNREGISTERED_POLYMORPHIC_CAST_EXCEPTION</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">LoadSave</td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"> <span class="keywordflow">throw</span> <a class="code" href="structcereal_1_1Exception.html">cereal::Exception</a>(<span class="stringliteral">&quot;Trying to &quot;</span> #LoadSave <span class="stringliteral">&quot; a registered polymorphic type with an unregistered polymorphic cast.\n&quot;</span> \</div>
<div class="line"> <span class="stringliteral">&quot;Could not find a path to a base class (&quot;</span> + util::demangle(baseInfo.name()) + <span class="stringliteral">&quot;) for type: &quot;</span> + ::cereal::util::demangledName&lt;Derived&gt;() + <span class="stringliteral">&quot;\n&quot;</span> \</div>
<div class="line"> <span class="stringliteral">&quot;Make sure you either serialize the base class at some point via cereal::base_class or cereal::virtual_base_class.\n&quot;</span> \</div>
<div class="line"> <span class="stringliteral">&quot;Alternatively, manually register the association with CEREAL_REGISTER_POLYMORPHIC_RELATION.&quot;</span>);</div>
</div><!-- fragment -->
<p>Error message used for unregistered polymorphic casts. </p>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="a9c34d32da6bee20cb6609e78efc69174"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9c34d32da6bee20cb6609e78efc69174">&#9670;&nbsp;</a></span>instantiate_polymorphic_binding()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T , typename BindingTag &gt; </div>
<table class="memname">
<tr>
<td class="memname">void cereal::detail::instantiate_polymorphic_binding </td>
<td>(</td>
<td class="paramtype">T *&#160;</td>
<td class="paramname">, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname">, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">BindingTag&#160;</td>
<td class="paramname">, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structcereal_1_1detail_1_1adl__tag.html">adl_tag</a>&#160;</td>
<td class="paramname">&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Base case overload for instantiation. </p>
<p>This will end up always being the best overload due to the second parameter always being passed as an int. All other overloads will accept pointers to archive types and have lower precedence than int.</p>
<p>Since the compiler needs to check all possible overloads, the other overloads created via CEREAL_REGISTER_ARCHIVE, which will have lower precedence due to requring a conversion from int to (Archive*), will cause their return types to be instantiated through the static object mechanisms even though they are never called.</p>
<p>See the documentation for the other functions to try and understand this </p>
</div>
</div>
</div><!-- contents -->
<div class="ttc" id="aclasscereal_1_1detail_1_1StaticObject_html"><div class="ttname"><a href="classcereal_1_1detail_1_1StaticObject.html">cereal::detail::StaticObject</a></div><div class="ttdoc">A static, pre-execution object.</div><div class="ttdef"><b>Definition:</b> static_object.hpp:67</div></div>
<div class="ttc" id="astructcereal_1_1Exception_html"><div class="ttname"><a href="structcereal_1_1Exception.html">cereal::Exception</a></div><div class="ttdoc">An exception class thrown when things go wrong at runtime.</div><div class="ttdef"><b>Definition:</b> helpers.hpp:48</div></div>
<!-- HTML footer for doxygen 1.8.3.1-->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Feb 27 2022 19:46:46 for cereal by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.17
</small></address>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-42360142-1', 'uscilab.github.io');
ga('send', 'pageview');
</script>
</body>
</html>