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

162 lines
9.7 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: cereal::base_class&lt; Base &gt; Struct Template 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"><b>cereal</b></li><li class="navelem"><a class="el" href="structcereal_1_1base__class.html">base_class</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-attribs">Public Attributes</a> &#124;
<a href="structcereal_1_1base__class-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">cereal::base_class&lt; Base &gt; Struct Template Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Casts a derived class to its non-virtual base class in a way that safely supports abstract classes.
<a href="structcereal_1_1base__class.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="base__class_8hpp_source.html">/home/shane/workspace/cereal/include/cereal/types/base_class.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for cereal::base_class&lt; Base &gt;:</div>
<div class="dyncontent">
<div class="center">
<img src="structcereal_1_1base__class.png" usemap="#cereal::base_5Fclass_3C_20Base_20_3E_map" alt=""/>
<map id="cereal::base_5Fclass_3C_20Base_20_3E_map" name="cereal::base_5Fclass_3C_20Base_20_3E_map">
<area href="structcereal_1_1traits_1_1detail_1_1BaseCastBase.html" title="Common base type for base class casting." alt="cereal::traits::detail::BaseCastBase" shape="rect" coords="0,0,204,24"/>
</map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a7d896451c036c78b21498900556f21ca"><td class="memTemplParams" colspan="2"><a id="a7d896451c036c78b21498900556f21ca"></a>
template&lt;class Derived &gt; </td></tr>
<tr class="memitem:a7d896451c036c78b21498900556f21ca"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><b>base_class</b> (Derived const *derived)</td></tr>
<tr class="separator:a7d896451c036c78b21498900556f21ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Public Attributes</h2></td></tr>
<tr class="memitem:a104db3f222397a826d0c046372fde64e"><td class="memItemLeft" align="right" valign="top"><a id="a104db3f222397a826d0c046372fde64e"></a>
Base *&#160;</td><td class="memItemRight" valign="bottom"><b>base_ptr</b></td></tr>
<tr class="separator:a104db3f222397a826d0c046372fde64e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;class Base&gt;<br />
struct cereal::base_class&lt; Base &gt;</h3>
<p>Casts a derived class to its non-virtual base class in a way that safely supports abstract classes. </p>
<p>This should be used in cases when a derived type needs to serialize its base type. This is better than directly using static_cast, as it allows for serialization of pure virtual (abstract) base classes.</p>
<p>This also automatically registers polymorphic relation between the base and derived class, assuming they are indeed polymorphic. Note this is not the same as polymorphic type registration. For more information see the documentation on polymorphism. If using a polymorphic class, be sure to include support for polymorphism (<a class="el" href="polymorphic_8hpp.html" title="Support for pointers to polymorphic base classes.">cereal/types/polymorphic.hpp</a>).</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="structcereal_1_1virtual__base__class.html" title="Casts a derived class to its virtual base class in a way that allows cereal to track inheritance.">virtual_base_class</a></dd></dl>
<div class="fragment"><div class="line"><span class="keyword">struct </span>MyBase</div>
<div class="line">{</div>
<div class="line"> <span class="keywordtype">int</span> x;</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">virtual</span> <span class="keywordtype">void</span> foo() = 0;</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">template</span> &lt;<span class="keyword">class</span> Archive&gt;</div>
<div class="line"> <span class="keywordtype">void</span> <a class="code" href="functional_8hpp.html#a02f9cfc9a4055c8a49eb050b02cd3357">serialize</a>( Archive &amp; ar )</div>
<div class="line"> {</div>
<div class="line"> ar( x );</div>
<div class="line"> }</div>
<div class="line">};</div>
<div class="line"> </div>
<div class="line"><span class="keyword">struct </span>MyDerived : <span class="keyword">public</span> MyBase <span class="comment">//&lt;-- Note non-virtual inheritance</span></div>
<div class="line">{</div>
<div class="line"> <span class="keywordtype">int</span> y;</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">virtual</span> <span class="keywordtype">void</span> foo() {};</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">template</span> &lt;<span class="keyword">class</span> Archive&gt;</div>
<div class="line"> <span class="keywordtype">void</span> <a class="code" href="functional_8hpp.html#a02f9cfc9a4055c8a49eb050b02cd3357">serialize</a>( Archive &amp; ar )</div>
<div class="line"> {</div>
<div class="line"> ar( <a class="code" href="structcereal_1_1base__class.html">cereal::base_class&lt;MyBase&gt;</a>(<span class="keyword">this</span>) );</div>
<div class="line"> ar( y );</div>
<div class="line"> }</div>
<div class="line">};</div>
</div><!-- fragment --> </div><hr/>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="base__class_8hpp_source.html">base_class.hpp</a></li>
</ul>
</div><!-- contents -->
<div class="ttc" id="afunctional_8hpp_html_a02f9cfc9a4055c8a49eb050b02cd3357"><div class="ttname"><a href="functional_8hpp.html#a02f9cfc9a4055c8a49eb050b02cd3357">cereal::serialize</a></div><div class="ttdeci">void serialize(Archive &amp;, std::less&lt; T &gt; &amp;)</div><div class="ttdoc">Saving for std::less.</div><div class="ttdef"><b>Definition:</b> functional.hpp:39</div></div>
<div class="ttc" id="astructcereal_1_1base__class_html"><div class="ttname"><a href="structcereal_1_1base__class.html">cereal::base_class</a></div><div class="ttdoc">Casts a derived class to its non-virtual base class in a way that safely supports abstract classes.</div><div class="ttdef"><b>Definition:</b> base_class.hpp:100</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>