Make sure this example compiles. Fixes #4548.

[SVN r71064]
This commit is contained in:
Steven Watanabe
2011-04-07 00:31:40 +00:00
parent 84a7f372af
commit 3118946989
2 changed files with 174 additions and 167 deletions

View File

@@ -107,7 +107,7 @@ interfaces.
// [...]
std::auto_ptr<an_abstract_factory> x = factories[some_name]->create();
std::auto_ptr<an_abstract_class> x(factories.at(some_name).create());
// [...]
}

View File

@@ -1,10 +1,10 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Chapter<EFBFBD>1.<2E>Boost.Functional/Factory 1.0</title>
<link rel="stylesheet" href="boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
<link rel="start" href="index.html" title="Chapter<EFBFBD>1.<2E>Boost.Functional/Factory 1.0">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Chapter&#160;1.&#160;Boost.Functional/Factory 1.0</title>
<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
<link rel="home" href="index.html" title="Chapter&#160;1.&#160;Boost.Functional/Factory 1.0">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
@@ -17,16 +17,16 @@
</tr></table>
<hr>
<div class="spirit-nav"></div>
<div class="chapter" lang="en">
<div class="chapter">
<div class="titlepage"><div>
<div><h2 class="title">
<a name="boost_functional_factory"></a>Chapter<EFBFBD>1.<2E>Boost.Functional/Factory 1.0</h2></div>
<a name="boost_functional_factory"></a>Chapter&#160;1.&#160;Boost.Functional/Factory 1.0</h2></div>
<div><div class="author"><h3 class="author">
<span class="firstname">Tobias</span> <span class="surname">Schwinger</span>
</h3></div></div>
<div><p class="copyright">Copyright <EFBFBD> 2007, 2008 Tobias Schwinger</p></div>
<div><p class="copyright">Copyright &#169; 2007, 2008 Tobias Schwinger</p></div>
<div><div class="legalnotice">
<a name="id934161"></a><p>
<a name="id2865350"></a><p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
@@ -37,14 +37,15 @@
<dl>
<dt><span class="section"><a href="index.html#boost_functional_factory.brief_description">Brief Description</a></span></dt>
<dt><span class="section"><a href="index.html#boost_functional_factory.background">Background</a></span></dt>
<dt><span class="section"><a href="index.html#boost_functional_factory.reference"> Reference</a></span></dt>
<dt><span class="section"><a href="index.html#boost_functional_factory.reference">Reference</a></span></dt>
<dt><span class="section"><a href="index.html#boost_functional_factory.acknowledgements">Acknowledgements</a></span></dt>
<dt><span class="section"><a href="index.html#boost_functional_factory.references">References</a></span></dt>
</dl>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_functional_factory.brief_description"></a><a href="index.html#boost_functional_factory.brief_description" title="Brief Description">Brief Description</a></h2></div></div></div>
<a name="boost_functional_factory.brief_description"></a><a class="link" href="index.html#boost_functional_factory.brief_description" title="Brief Description">Brief Description</a>
</h2></div></div></div>
<p>
The template <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">factory</span></code> lets you encapsulate a <code class="computeroutput"><span class="keyword">new</span></code> expression as a function object, <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">value_factory</span></code>
encapsulates a constructor invocation without <code class="computeroutput"><span class="keyword">new</span></code>.
@@ -61,9 +62,10 @@
or <a href="http://www.boost.org/libs/bind/bind.html" target="_top"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind</span></code></a>.
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_functional_factory.background"></a><a href="index.html#boost_functional_factory.background" title="Background">Background</a></h2></div></div></div>
<a name="boost_functional_factory.background"></a><a class="link" href="index.html#boost_functional_factory.background" title="Background">Background</a>
</h2></div></div></div>
<p>
In traditional Object Oriented Programming a Factory is an object implementing
an interface of one or more methods that construct objects conforming to known
@@ -112,7 +114,7 @@
<span class="comment">// [...]
</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">auto_ptr</span><span class="special">&lt;</span><span class="identifier">an_abstract_factory</span><span class="special">&gt;</span> <span class="identifier">x</span> <span class="special">=</span> <span class="identifier">factories</span><span class="special">[</span><span class="identifier">some_name</span><span class="special">]-&gt;</span><span class="identifier">create</span><span class="special">();</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">auto_ptr</span><span class="special">&lt;</span><span class="identifier">an_abstract_class</span><span class="special">&gt;</span> <span class="identifier">x</span><span class="special">(</span><span class="identifier">factories</span><span class="special">.</span><span class="identifier">at</span><span class="special">(</span><span class="identifier">some_name</span><span class="special">).</span><span class="identifier">create</span><span class="special">());</span>
<span class="comment">// [...]
</span><span class="special">}</span>
@@ -130,7 +132,7 @@
<span class="identifier">objects</span><span class="special">,</span>
<span class="identifier">o</span> <span class="identifier">we</span> <span class="identifier">might</span> <span class="keyword">not</span> <span class="identifier">necessarily</span> <span class="identifier">need</span> <span class="identifier">a</span> <span class="identifier">polymorphic</span> <span class="identifier">base</span> <span class="keyword">class</span> <span class="keyword">for</span> <span class="identifier">the</span> <span class="identifier">objects</span><span class="special">,</span>
<span class="identifier">o</span> <span class="identifier">as</span> <span class="identifier">we</span> <span class="identifier">will</span> <span class="identifier">see</span><span class="special">,</span> <span class="identifier">we</span> <span class="keyword">do</span> <span class="keyword">not</span> <span class="identifier">need</span> <span class="identifier">a</span> <span class="identifier">factory</span> <span class="identifier">base</span> <span class="keyword">class</span> <span class="identifier">at</span> <span class="identifier">all</span><span class="special">,</span>
<span class="identifier">o</span> <span class="identifier">we</span> <span class="identifier">might</span> <span class="identifier">want</span> <span class="identifier">to</span> <span class="identifier">just</span> <span class="identifier">call</span> <span class="identifier">the</span> <span class="identifier">constructor</span> <span class="special">-</span> <span class="identifier">without</span> #<span class="keyword">new</span># <span class="identifier">to</span> <span class="identifier">create</span>
<span class="identifier">o</span> <span class="identifier">we</span> <span class="identifier">might</span> <span class="identifier">want</span> <span class="identifier">to</span> <span class="identifier">just</span> <span class="identifier">call</span> <span class="identifier">the</span> <span class="identifier">constructor</span> <span class="special">-</span> <span class="identifier">without</span> <span class="error">`</span><span class="keyword">new</span><span class="error">`</span> <span class="identifier">to</span> <span class="identifier">create</span>
<span class="identifier">an</span> <span class="identifier">object</span> <span class="identifier">on</span> <span class="identifier">the</span> <span class="identifier">stack</span><span class="special">,</span> <span class="keyword">and</span>
<span class="identifier">o</span> <span class="identifier">finally</span> <span class="identifier">we</span> <span class="identifier">might</span> <span class="identifier">want</span> <span class="identifier">to</span> <span class="identifier">use</span> <span class="identifier">customized</span> <span class="identifier">memory</span> <span class="identifier">management</span><span class="special">.</span>
</pre>
@@ -246,33 +248,35 @@
<a href="http://www.boost.org/libs/smart_ptr/index.html" target="_top">Smart Pointers</a>.
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_functional_factory.reference"></a><a href="index.html#boost_functional_factory.reference" title=" Reference"> Reference</a></h2></div></div></div>
<a name="boost_functional_factory.reference"></a><a class="link" href="index.html#boost_functional_factory.reference" title="Reference">Reference</a>
</h2></div></div></div>
<div class="toc"><dl>
<dt><span class="section"><a href="index.html#boost_functional_factory.reference.value_factory">value_factory</a></span></dt>
<dt><span class="section"><a href="index.html#boost_functional_factory.reference.factory">factory</a></span></dt>
</dl></div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_functional_factory.reference.value_factory"></a><a href="index.html#boost_functional_factory.reference.value_factory" title="value_factory">value_factory</a></h3></div></div></div>
<a name="boost_functional_factory.reference.value_factory.description"></a><h4>
<a name="id936876"></a>
<a href="index.html#boost_functional_factory.reference.value_factory.description">Description</a>
</h4>
<a name="boost_functional_factory.reference.value_factory"></a><a class="link" href="index.html#boost_functional_factory.reference.value_factory" title="value_factory">value_factory</a>
</h3></div></div></div>
<a name="boost_functional_factory.reference.value_factory.description"></a><h5>
<a name="boost_functional_factory.reference.value_factory.description-heading"></a>
<a class="link" href="index.html#boost_functional_factory.reference.value_factory.description">Description</a>
</h5>
<p>
Function object template that invokes the constructor of the type <code class="computeroutput"><span class="identifier">T</span></code>.
</p>
<a name="boost_functional_factory.reference.value_factory.header"></a><h4>
<a name="id936914"></a>
<a href="index.html#boost_functional_factory.reference.value_factory.header">Header</a>
</h4>
<a name="boost_functional_factory.reference.value_factory.header"></a><h5>
<a name="boost_functional_factory.reference.value_factory.header-heading"></a>
<a class="link" href="index.html#boost_functional_factory.reference.value_factory.header">Header</a>
</h5>
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">functional</span><span class="special">/</span><span class="identifier">value_factory</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
</pre>
<a name="boost_functional_factory.reference.value_factory.synopsis"></a><h4>
<a name="id936989"></a>
<a href="index.html#boost_functional_factory.reference.value_factory.synopsis">Synopsis</a>
</h4>
<a name="boost_functional_factory.reference.value_factory.synopsis"></a><h5>
<a name="boost_functional_factory.reference.value_factory.synopsis-heading"></a>
<a class="link" href="index.html#boost_functional_factory.reference.value_factory.synopsis">Synopsis</a>
</h5>
<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span>
<span class="special">{</span>
<span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">T</span> <span class="special">&gt;</span>
@@ -300,11 +304,11 @@
</p></dd>
</dl>
</div>
<a name="boost_functional_factory.reference.value_factory.expression_semantics"></a><h4>
<a name="id937226"></a>
<a href="index.html#boost_functional_factory.reference.value_factory.expression_semantics">Expression
<a name="boost_functional_factory.reference.value_factory.expression_semantics"></a><h5>
<a name="boost_functional_factory.reference.value_factory.expression_semantics-heading"></a>
<a class="link" href="index.html#boost_functional_factory.reference.value_factory.expression_semantics">Expression
Semantics</a>
</h4>
</h5>
<div class="informaltable"><table class="table">
<colgroup>
<col>
@@ -373,22 +377,23 @@
</tr>
</tbody>
</table></div>
<a name="boost_functional_factory.reference.value_factory.limits"></a><h4>
<a name="id937498"></a>
<a href="index.html#boost_functional_factory.reference.value_factory.limits">Limits</a>
</h4>
<a name="boost_functional_factory.reference.value_factory.limits"></a><h5>
<a name="boost_functional_factory.reference.value_factory.limits-heading"></a>
<a class="link" href="index.html#boost_functional_factory.reference.value_factory.limits">Limits</a>
</h5>
<p>
The macro BOOST_FUNCTIONAL_VALUE_FACTORY_MAX_ARITY can be defined to set
the maximum arity. It defaults to 10.
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_functional_factory.reference.factory"></a><a href="index.html#boost_functional_factory.reference.factory" title="factory">factory</a></h3></div></div></div>
<a name="boost_functional_factory.reference.factory.description"></a><h4>
<a name="id937545"></a>
<a href="index.html#boost_functional_factory.reference.factory.description">Description</a>
</h4>
<a name="boost_functional_factory.reference.factory"></a><a class="link" href="index.html#boost_functional_factory.reference.factory" title="factory">factory</a>
</h3></div></div></div>
<a name="boost_functional_factory.reference.factory.description"></a><h5>
<a name="boost_functional_factory.reference.factory.description-heading"></a>
<a class="link" href="index.html#boost_functional_factory.reference.factory.description">Description</a>
</h5>
<p>
Function object template that dynamically constructs a pointee object for
the type of pointer given as template argument. Smart pointers may be used
@@ -396,12 +401,12 @@
yields the pointee type.
</p>
<p>
If an <span class="underline">_allocator</span>_ is given, it is used
If an <span class="underline">_allocator_</span> is given, it is used
for memory allocation and the placement form of the <code class="computeroutput"><span class="keyword">new</span></code>
operator is used to construct the object. A function object that calls the
destructor and deallocates the memory with a copy of the Allocator is used
for the second constructor argument of <code class="computeroutput"><span class="identifier">Pointer</span></code>
(thus it must be a __smart<span class="underline">pointer</span>_
(thus it must be a <span class="underline">_smart_pointer_</span>
that provides a suitable constructor, such as <a href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" target="_top"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span></code></a>).
</p>
<p>
@@ -409,16 +414,16 @@
the allocator itself is used for the third constructor argument of <code class="computeroutput"><span class="identifier">Pointer</span></code> (<a href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" target="_top"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span></code></a> then uses the allocator
to manage the memory of its seperately allocated reference counter).
</p>
<a name="boost_functional_factory.reference.factory.header"></a><h4>
<a name="id937729"></a>
<a href="index.html#boost_functional_factory.reference.factory.header">Header</a>
</h4>
<a name="boost_functional_factory.reference.factory.header"></a><h5>
<a name="boost_functional_factory.reference.factory.header-heading"></a>
<a class="link" href="index.html#boost_functional_factory.reference.factory.header">Header</a>
</h5>
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">functional</span><span class="special">/</span><span class="identifier">factory</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
</pre>
<a name="boost_functional_factory.reference.factory.synopsis"></a><h4>
<a name="id937804"></a>
<a href="index.html#boost_functional_factory.reference.factory.synopsis">Synopsis</a>
</h4>
<a name="boost_functional_factory.reference.factory.synopsis"></a><h5>
<a name="boost_functional_factory.reference.factory.synopsis-heading"></a>
<a class="link" href="index.html#boost_functional_factory.reference.factory.synopsis">Synopsis</a>
</h5>
<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span>
<span class="special">{</span>
<span class="keyword">enum</span> <span class="identifier">factory_alloc_propagation</span>
@@ -459,11 +464,11 @@
</p></dd>
</dl>
</div>
<a name="boost_functional_factory.reference.factory.expression_semantics"></a><h4>
<a name="id938169"></a>
<a href="index.html#boost_functional_factory.reference.factory.expression_semantics">Expression
<a name="boost_functional_factory.reference.factory.expression_semantics"></a><h5>
<a name="boost_functional_factory.reference.factory.expression_semantics-heading"></a>
<a class="link" href="index.html#boost_functional_factory.reference.factory.expression_semantics">Expression
Semantics</a>
</h4>
</h5>
<div class="informaltable"><table class="table">
<colgroup>
<col>
@@ -535,19 +540,20 @@
</tr>
</tbody>
</table></div>
<a name="boost_functional_factory.reference.factory.limits"></a><h4>
<a name="id938440"></a>
<a href="index.html#boost_functional_factory.reference.factory.limits">Limits</a>
</h4>
<a name="boost_functional_factory.reference.factory.limits"></a><h5>
<a name="boost_functional_factory.reference.factory.limits-heading"></a>
<a class="link" href="index.html#boost_functional_factory.reference.factory.limits">Limits</a>
</h5>
<p>
The macro BOOST_FUNCTIONAL_FACTORY_MAX_ARITY can be defined to set the maximum
arity. It defaults to 10.
</p>
</div>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_functional_factory.acknowledgements"></a><a href="index.html#boost_functional_factory.acknowledgements" title="Acknowledgements">Acknowledgements</a></h2></div></div></div>
<a name="boost_functional_factory.acknowledgements"></a><a class="link" href="index.html#boost_functional_factory.acknowledgements" title="Acknowledgements">Acknowledgements</a>
</h2></div></div></div>
<p>
Eric Niebler requested a function to invoke a type's constructor (with the
arguments supplied as a Tuple) as a Fusion feature. These Factory utilities
@@ -565,24 +571,25 @@
and their evolution.
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_functional_factory.references"></a><a href="index.html#boost_functional_factory.references" title="References">References</a></h2></div></div></div>
<div class="orderedlist"><ol type="1">
<li>
<a href="http://en.wikipedia.org/wiki/Design_Patterns" target="_top">Design Patterns</a>,
<a name="boost_functional_factory.references"></a><a class="link" href="index.html#boost_functional_factory.references" title="References">References</a>
</h2></div></div></div>
<div class="orderedlist"><ol class="orderedlist" type="1">
<li class="listitem">
<a href="http://en.wikipedia.org/wiki/Design_Patterns" target="_top">Design Patterns</a>,
Gamma et al. - Addison Wesley Publishing, 1995
</li>
<li>
<a href="http://www.sgi.com/tech/stl/" target="_top">Standard Template Library Programmer's
<li class="listitem">
<a href="http://www.sgi.com/tech/stl/" target="_top">Standard Template Library Programmer's
Guide</a>, Hewlett-Packard Company, 1994
</li>
<li>
<a href="http://www.boost.org/libs/bind/bind.html" target="_top">Boost.Bind</a>,
<li class="listitem">
<a href="http://www.boost.org/libs/bind/bind.html" target="_top">Boost.Bind</a>,
Peter Dimov, 2001-2005
</li>
<li>
<a href="http://www.boost.org/doc/html/function.html" target="_top">Boost.Function</a>,
<li class="listitem">
<a href="http://www.boost.org/doc/html/function.html" target="_top">Boost.Function</a>,
Douglas Gregor, 2001-2004
</li>
</ol></div>