*** empty log message ***

[SVN r25581]
This commit is contained in:
Thorsten Jørgen Ottosen
2004-10-06 18:19:13 +00:00
parent 846cbcea43
commit ae8efa1436
3 changed files with 2 additions and 134 deletions

View File

@ -1,123 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Concepts and External Concepts </title>
<meta http-equiv="Content-Type"content="text/html; charset=iso-8859-1">
</head>
<body>
<table >
<tr >
<td ><img src="../../../boost.png" width="100%" border="0"></td>
<td ><h1 >Concepts and External Concepts</h1></td>
</tr>
</table>
<p >
Generic programming in C++ is characterized by the use of function and class
templates where the template parameter(s) must satisfy certain requirements.Often
these requirements are so important that we give them a name: we call such a set
of type requirements a <b>concept</b>. We say that a type <i>conforms to a
concept</i> or that it <i>is a model of a concept</i> if it satisfies all of
those requirements. The concept can be specified as a set of member functions
with well-defined semantics and a set of nested typedefs with well-defined
properties.
</p>
<p >
Often it much more flexible to provide free-standing functions and typedefs
which provides the exact same semantics (but a different syntax) as specified by
the concept. This allows generic code to treat different types <i>as if</i> they
fulfilled the concept. In this case we say that the concept has been <b>externalized
</b> or that the new requirements constitutes an <b>external concept </b>. We
say that a type <i>conforms to an external concept </i> or that it <i>is a model
of an external concept </i>. A concept may exist without a corresponding
external concept and conversely.
</p>
<p >
Whenever a concept specifies a member function, the corresponding external
concept must specify a free-standing function of the same name, same return type
and the same argument list except there is an extra first argument which must be
of the type (or a reference to that type) that is to fulfill the external
concept. If the corresonding member function has any cv-qulifiers, the first
argument must have the same cv-qualifiers. Whenever a concept specifies a nested
typedef, the corresponding external concept specifies a <b>metafunction</b>,
that is, a type with a nested typedef named <code>type</code>. The metafunction
has the name as the nested typedef with <code>_of</code> appended. The converse
relationship of an external concept and its corresponding concept also holds.
</p>
<p >
<b ><i >Example:</i></b>
</p>
<p >
A type <code>T</code> fulfills the FooConcept if it has the follwing public
members:
</p>
<code>void T::foo( int ) const; <br>
int T::bar(); <br>
typedef <i>implementation defined </i> foo_type;</code>
<p >
The corresponding external concept is the ExternalFooConcept.
</p>
<p >
A type <code>T</code> fullfills the ExternalFooConcept if these free-standing
functions and metafunctions exists:
</p>
<code>void foo( const T&, int ); <br>
int bar( T& ); <br>
foo_type_of< T >::type;</code> <br>
<br>
<hr size="1" >
<h3 >Literature</h3>
<ul >
<li >
<a href="http://www.boost.org/more/generic_programming.html#type_generator" target="_self" >Type
Generators</a>
</li>
<li >
<a href="http://www.boost.org/more/generic_programming.html#concept" target="_self" >Concepts</a>
</li>
<li >
<a href="http://www.sgi.com/tech/stl/stl_introduction.html" target="_self" >Concepts
and SGI STL</a>
</li>
</ul>
<hr size="1" >
<p >
&copy; Thorsten Ottosen 2003-2004 (nesotto_AT_cs.auc.dk). Permission to copy,
use, modify, sell and distribute this software is granted provided this
copyright notice appears in all copies. This software is provided "as is"
without express or implied warranty, and with no claim as to its suitability for
any purpose.
</p>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
</body>
</html>
<!-- Copyright Dezide Aps 2003-2004 -->

View File

@ -50,16 +50,6 @@ href="../../mpl/doc/index.html#metafunctions">metafunctions</a> and
free-standing functions so syntactic and/or semantic differences can be removed. free-standing functions so syntactic and/or semantic differences can be removed.
</p> </p>
<!-- <p>
This library makes it possible to treat different types as if they have
implemented a subset of the container requirements (see &sect;23.1of the C++
standard). Formally, that subset is defined by the <a href="Range.htm"
target="_self" >Range</a> concept. The subset deals mostly with iterator
returning functions and nested <code >typedef</code>s. The main goal is to treat
built-in arrays, standard containers, pairs of iterators and some iterators
uniformly.
</p>
-->
<p > <p >
The main advantages are The main advantages are
<ul > <ul >

View File

@ -415,7 +415,8 @@ otherwise.</TD>
<p> <p>
A range <code>X</code> where <code>range_iterator&lt;X>::type</code> is a model A range <code>X</code> where <code>range_iterator&lt;X>::type</code> is a model
of <a of <a
href="../../iterator/doc/new-iter-concept.html#random-access-traversal-iterators
href="../../iterator/doc/new-iter-concepts.html#random-access-traversal-iterators
-lib-random-access-traversal-iterators">Random Access Traversal Iterator</a> -lib-random-access-traversal-iterators">Random Access Traversal Iterator</a>
</p> </p>