mirror of
https://github.com/USCiLab/cereal.git
synced 2025-07-21 02:22:01 +02:00
193 lines
13 KiB
HTML
193 lines
13 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::virtual_base_class< Base > 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&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&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_1virtual__base__class.html">virtual_base_class</a></li> </ul>
|
|
</div>
|
|
</div><!-- top -->
|
|
<div class="header">
|
|
<div class="summary">
|
|
<a href="#pub-methods">Public Member Functions</a> |
|
|
<a href="#pub-attribs">Public Attributes</a> |
|
|
<a href="structcereal_1_1virtual__base__class-members.html">List of all members</a> </div>
|
|
<div class="headertitle">
|
|
<div class="title">cereal::virtual_base_class< Base > Struct Template Reference</div> </div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
|
|
<p>Casts a derived class to its virtual base class in a way that allows cereal to track inheritance.
|
|
<a href="structcereal_1_1virtual__base__class.html#details">More...</a></p>
|
|
|
|
<p><code>#include <<a class="el" href="base__class_8hpp_source.html">/home/shane/workspace/cereal/include/cereal/types/base_class.hpp</a>></code></p>
|
|
<div class="dynheader">
|
|
Inheritance diagram for cereal::virtual_base_class< Base >:</div>
|
|
<div class="dyncontent">
|
|
<div class="center">
|
|
<img src="structcereal_1_1virtual__base__class.png" usemap="#cereal::virtual_5Fbase_5Fclass_3C_20Base_20_3E_map" alt=""/>
|
|
<map id="cereal::virtual_5Fbase_5Fclass_3C_20Base_20_3E_map" name="cereal::virtual_5Fbase_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,211,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:afd6b37327af310dc6cdbf26f93ed9a06"><td class="memTemplParams" colspan="2"><a id="afd6b37327af310dc6cdbf26f93ed9a06"></a>
|
|
template<class Derived > </td></tr>
|
|
<tr class="memitem:afd6b37327af310dc6cdbf26f93ed9a06"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>virtual_base_class</b> (Derived const *derived)</td></tr>
|
|
<tr class="separator:afd6b37327af310dc6cdbf26f93ed9a06"><td class="memSeparator" colspan="2"> </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:a05ecaf63e04ea18fec2733628f9679eb"><td class="memItemLeft" align="right" valign="top"><a id="a05ecaf63e04ea18fec2733628f9679eb"></a>
|
|
Base * </td><td class="memItemRight" valign="bottom"><b>base_ptr</b></td></tr>
|
|
<tr class="separator:a05ecaf63e04ea18fec2733628f9679eb"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table>
|
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
|
<div class="textblock"><h3>template<class Base><br />
|
|
struct cereal::virtual_base_class< Base ></h3>
|
|
|
|
<p>Casts a derived class to its virtual base class in a way that allows cereal to track inheritance. </p>
|
|
<p>This should be used in cases when a derived type features virtual inheritance from some base type. This allows cereal to track the inheritance and to avoid making duplicate copies during serialization.</p>
|
|
<p>It is safe to use <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> in all circumstances for serializing base classes, even in cases where virtual inheritance does not take place, though it may be slightly faster to utilize cereal::base_class<> if you do not need to worry about virtual inheritance.</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_1base__class.html" title="Casts a derived class to its non-virtual base class in a way that safely supports abstract classes.">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">template</span> <<span class="keyword">class</span> Archive></div>
|
|
<div class="line"> <span class="keywordtype">void</span> <a class="code" href="functional_8hpp.html#a02f9cfc9a4055c8a49eb050b02cd3357">serialize</a>( Archive & 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>MyLeft : <span class="keyword">virtual</span> MyBase <span class="comment">//<-- Note the 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">template</span> <<span class="keyword">class</span> Archive></div>
|
|
<div class="line"> <span class="keywordtype">void</span> <a class="code" href="functional_8hpp.html#a02f9cfc9a4055c8a49eb050b02cd3357">serialize</a>( Archive & ar )</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> ar( <a class="code" href="structcereal_1_1virtual__base__class.html">cereal::virtual_base_class<MyBase></a>( <span class="keyword">this</span> ) );</div>
|
|
<div class="line"> ar( y );</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> };</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <span class="keyword">struct </span>MyRight : <span class="keyword">virtual</span> MyBase</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <span class="keywordtype">int</span> z;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <span class="keyword">template</span> <<span class="keyword">class</span> Archive></div>
|
|
<div class="line"> <span class="keywordtype">void</span> <a class="code" href="functional_8hpp.html#a02f9cfc9a4055c8a49eb050b02cd3357">serialize</a>( Archive & ar )</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> ar( cereal::virtual_base_clas<MyBase>( <span class="keyword">this</span> ) );</div>
|
|
<div class="line"> ar( z );</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> };</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <span class="comment">// diamond virtual inheritance; contains one copy of each base class</span></div>
|
|
<div class="line"> <span class="keyword">struct </span>MyDerived : <span class="keyword">virtual</span> MyLeft, <span class="keyword">virtual</span> MyRight</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <span class="keywordtype">int</span> a;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <span class="keyword">template</span> <<span class="keyword">class</span> Archive></div>
|
|
<div class="line"> <span class="keywordtype">void</span> <a class="code" href="functional_8hpp.html#a02f9cfc9a4055c8a49eb050b02cd3357">serialize</a>( Archive & ar )</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> ar( <a class="code" href="structcereal_1_1virtual__base__class.html">cereal::virtual_base_class<MyLeft></a>( <span class="keyword">this</span> ) ); <span class="comment">// safely serialize data members in MyLeft</span></div>
|
|
<div class="line"> ar( <a class="code" href="structcereal_1_1virtual__base__class.html">cereal::virtual_base_class<MyRight></a>( <span class="keyword">this</span> ) ); <span class="comment">// safely serialize data members in MyRight</span></div>
|
|
<div class="line"> ar( a );</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <span class="comment">// Because we used virtual_base_class, cereal will ensure that only one instance of MyBase is</span></div>
|
|
<div class="line"> <span class="comment">// serialized as we traverse the inheritance heirarchy. This means that there will be one copy</span></div>
|
|
<div class="line"> <span class="comment">// each of the variables x, y, z, and a</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <span class="comment">// If we had chosen to use static_cast<> instead, cereal would perform no tracking and</span></div>
|
|
<div class="line"> <span class="comment">// assume that every base class should be serialized (in this case leading to a duplicate</span></div>
|
|
<div class="line"> <span class="comment">// serialization of MyBase due to diamond inheritance</span></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 &, std::less< T > &)</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_1virtual__base__class_html"><div class="ttname"><a href="structcereal_1_1virtual__base__class.html">cereal::virtual_base_class</a></div><div class="ttdoc">Casts a derived class to its virtual base class in a way that allows cereal to track inheritance.</div><div class="ttdef"><b>Definition:</b> base_class.hpp:188</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  <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>
|