92 lines
3.9 KiB
HTML
92 lines
3.9 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<!--
|
|
(C) Copyright 2002-4 Robert Ramey - http://www.rrsd.com .
|
|
Use, modification and distribution is subject to the Boost Software
|
|
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
|
http://www.boost.org/LICENSE_1_0.txt)
|
|
-->
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<link rel="stylesheet" type="text/css" href="../../../boost.css">
|
|
<link rel="stylesheet" type="text/css" href="style.css">
|
|
<title>Serialization - Proposed Case Studies</title>
|
|
</head>
|
|
<body link="#0000ff" vlink="#800080">
|
|
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
|
|
<tr>
|
|
<td valign="top" width="300">
|
|
<h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
|
|
</td>
|
|
<td valign="top">
|
|
<h1 align="center">Serialization</h1>
|
|
<h2 align="center">Proposed Case Studies</h2>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<hr>
|
|
<dl class="index">
|
|
<dt><a href="#functionobject">Serializing a Function Object</a></dt>
|
|
<dt><a href="#archiveadaptor">Archive Adaptors</a></dt>
|
|
<dt><a href="#archivehelper">Archive Helpers</a></dt>
|
|
</dl>
|
|
|
|
These are not part of the library itself, but rather
|
|
techiques on how to use the library to address specific situations.
|
|
|
|
<h2><a name="functionobject"></a>Serializing a Function Object</h2>
|
|
An example on how to serialize a function object. I believe this
|
|
could be done by serializing a pointer to the object in question. Since
|
|
the Serialization library resurrects a pointer of the correct type
|
|
this should be easily implementable.
|
|
<p>
|
|
If a group of function objects were all derived from the
|
|
same polymorphic base class - perhaps via multiple inheritance,
|
|
then the function object effectively becomes a "variable" which
|
|
encapsulates code.
|
|
<p>
|
|
This case study would show how to do this.
|
|
|
|
<h2><a name="archiveadaptor"></a>Archive Adaptors</h2>
|
|
|
|
Often users want to add their own special functionality to an
|
|
existing archive. Examples of this are performance enhancements
|
|
for specific types, adjustment of output syntax for xml archives,
|
|
and logging/debug output as archives are written and/or read.
|
|
If this functionality is implemented as an "adaptor" template
|
|
which takes the base class as a template argument, such functionality could be
|
|
appended to any archive for which that functionality makes sense.
|
|
For example, an adaptor for generating an xml schema could be
|
|
appended to both wide and narrow character versions of xml archives.
|
|
<p>
|
|
This case study would show how to make a useful archive adaptor.
|
|
|
|
<h2><a name="archivehelper"></a>Archive Helpers</h2>
|
|
Some types are not serializable as they stand. That is - they
|
|
do not fulfill the requirements of the "Serializable Concept".
|
|
The iconic example of this is boost::shared_ptr. Sometimes
|
|
these types could be made serializable by adding code inside
|
|
the library. Of course, doing that would create a lifetime
|
|
of unpaid employment for the library author. Rather than
|
|
adding a bunch of special code to the library itself, this
|
|
code can packaged as a "helper" or "mix-in" class. Then
|
|
a new archive is derived from both the "base" archive class
|
|
AND the "helper" class. This is how boost::shared_ptr
|
|
has been implemented.
|
|
<p>
|
|
It would also be possible to make a "generic runtime helper"
|
|
which would effectively extend the API of the library. Previously
|
|
the library included such a helper class. It was removed
|
|
in favor of the current implementation. But this functionality
|
|
should be added back in with another adaptor which would
|
|
become part of the library.
|
|
|
|
<hr>
|
|
<p>Revised 1 November, 2008
|
|
<p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2008.
|
|
Distributed under the Boost Software License, Version 1.0. (See
|
|
accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
</i></p>
|
|
</body>
|
|
</html>
|