Files
functional/function_traits.html
Andreas Huber 792ee1fee1 Fixed license & copyright issues.
From Mark Rodgers Fri Dec 1 12:59:14 2006
X-Apparently-To: ahd6974-boostorg -at- yahoo.com via 68.142.206.160; Fri, 01 Dec 2006 12:59:41 -0800
X-Originating-IP: [195.112.4.54]
Return-Path: <mark.rodgers -at- cadenza.co.nz>
Authentication-Results: mta550.mail.mud.yahoo.com from=cadenza.co.nz; domainkeys=neutral (no sig)
Received: from 195.112.4.54 (EHLO smtp.nildram.co.uk) (195.112.4.54) by mta550.mail.mud.yahoo.com with SMTP; Fri, 01 Dec 2006 12:59:40 -0800
Received: from snagglepuss.cadenza.co.nz (81-6-246-87.dyn.gotadsl.co.uk [81.6.246.87]) by smtp.nildram.co.uk (Postfix) with ESMTP id D32EA2B6D8C for <ahd6974-boostorg -at- yahoo.com>; Fri, 1 Dec 2006 20:59:35 +0000 (GMT)
Received: from penfold.cadenza.co.nz ([192.168.55.56]) by snagglepuss.cadenza.co.nz with esmtp (Exim 4.63) (envelope-from <mark.rodgers -at- cadenza.co.nz>) id J9M4Y9-0009TO-9K for ahd6974-boostorg -at- yahoo.com; Fri, 01 Dec 2006 20:58:57 +0000
Message-ID: <457097A2.1090305@cadenza.co.nz>
Date: Fri, 01 Dec 2006 20:59:14 +0000
From: "Mark Rodgers" <mark.rodgers -at- cadenza.co.nz>
User-Agent: Thunderbird 1.5.0.8 (Macintosh/20061025)
MIME-Version: 1.0
To: ahd6974-boostorg -at- yahoo.com [Edit - Delete]
Subject: Re: [boost] Reminder: Need your permission to correct license & copyright issues
References: <379990.36007.qm@web33507.mail.mud.yahoo.com>
In-Reply-To: <379990.36007.qm@web33507.mail.mud.yahoo.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Length: 812
Gidday Andreas

Sure that's fine.  I'm happy for you to do 1, 2 and 3.

Regards
Mark

Andreas Huber wrote:
> Hello Mark
>
> Quite a while ago it was decided that every file that goes into the
> 1.34 release of the Boost distribution (www.boost.org) needs uniform
> license and copyright information. For more information please see:
>
> <http://www.boost.org/more/license_info.html>
>
> You are receiving this email because several files you contributed
> lack such information or have an old license:
>
> boost/functional/functional.hpp
> boost/libs/functional/binders.html
> boost/libs/functional/function_test.cpp
> boost/libs/functional/function_traits.html
> boost/libs/functional/index.html
> boost/libs/functional/mem_fun.html
> boost/libs/functional/negators.html
> boost/libs/functional/ptr_fun.html
> boost/people/mark_rodgers.htm
>
> I therefore kindly ask you to grant the permission to do the
> following:
>
> 1. For the files above that already have a license text (all except
> mark_rodgers.htm), replace the license text with:
>
> "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)"
>
> 2. For the file that does not yet have a license and copyright
> (mark_rodgers.htm) add the same license text as under 1. and add the
> following copyright:
>
> "(c) Copyright Mark Rodgers 2000"
>
> 3. (Optional) I would also want to convert all HTML files to conform
> the HTML 4.01 Standard by running them through HTML Tidy, see
> <http://tidy.sf.net>
>
> It would be great if you could grant me permission to do 1 & 2 and
> optionally also 3.
>
> Thank you!
>
> Regards,
>
> Andreas Huber
>


[SVN r36245]
2006-12-02 13:57:33 +00:00

234 lines
6.9 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<title>Boost Function Object Adapter Library</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table border="1" bgcolor="#007F7F" cellpadding="2" summary="">
<tr>
<td bgcolor="#FFFFFF"><img src="../../boost.png" alt=
"boost.png (6897 bytes)" width="277" height="86"></td>
<td><a href="../../index.htm"><font face="Arial" color=
"#FFFFFF"><big>Home</big></font></a></td>
<td><a href="../libraries.htm"><font face="Arial" color=
"#FFFFFF"><big>Libraries</big></font></a></td>
<td><a href="../../people/people.htm"><font face="Arial" color=
"#FFFFFF"><big>People</big></font></a></td>
<td><a href="../../more/faq.htm"><font face="Arial" color=
"#FFFFFF"><big>FAQ</big></font></a></td>
<td><a href="../../more/index.htm"><font face="Arial" color=
"#FFFFFF"><big>More</big></font></a></td>
</tr>
</table>
<h1>Function Object Traits</h1>
<p>The header <a href="../../boost/functional.hpp">functional.hpp</a>
provides two traits class templates for functions and function objects:</p>
<table border="1" summary="">
<tr>
<th>Type</th>
<th>Contents</th>
<th>Description</th>
</tr>
<tr>
<td valign="top" rowspan="4">
<tt>template&nbsp;&lt;typename&nbsp;T&gt;<br>
struct&nbsp;unary_traits</tt></td>
<td valign="top"><tt>function_type</tt></td>
<td valign="top">The type of the function or function object itself
(i.e., <tt>T</tt>).</td>
</tr>
<tr>
<td valign="top"><tt>param_type</tt></td>
<td valign="top">The type that should be used to pass the function or
function object as a parameter.</td>
</tr>
<tr>
<td valign="top"><tt>result_type</tt></td>
<td valign="top">The type returned by the function or function
object.</td>
</tr>
<tr>
<td valign="top"><tt>argument_type</tt></td>
<td valign="top">The type of the argument to the function or function
object.</td>
</tr>
<tr>
<td valign="top" rowspan="5">
<tt>template&nbsp;&lt;typename&nbsp;T&gt;<br>
struct&nbsp;binary_traits</tt></td>
<td valign="top"><tt>function_type</tt></td>
<td valign="top">The type of the function or function object itself
(i.e., <tt>T</tt>).</td>
</tr>
<tr>
<td valign="top"><tt>param_type</tt></td>
<td valign="top">The type that should be used to pass the function or
function object as a parameter.</td>
</tr>
<tr>
<td valign="top"><tt>result_type</tt></td>
<td valign="top">The type returned by the function or function
object.</td>
</tr>
<tr>
<td valign="top"><tt>first_argument_type</tt></td>
<td valign="top">The type of the first argument to the function or
function object.</td>
</tr>
<tr>
<td valign="top"><tt>second_argument_type</tt></td>
<td valign="top">The type of the second argument to the function or
function object.</td>
</tr>
</table>
<h3>Usage</h3>
<p><tt>unary_traits</tt> should be instantiated with either a function
taking a single parameter, or an adaptable unary function object (i.e., a
class derived from <tt>std::unary_function</tt> or one which provides the
same typedefs). (See &sect;20.3.1 in the C++ Standard.)</p>
<p><tt>binary_traits</tt> should be instantiated with either a function
taking two parameters, or an adaptable binary function object (i.e., a
class derived from <tt>std::binary_function</tt> or one which provides the
same typedefs). (See &sect;20.3.1 in the C++ Standard.)</p>
<p>The most common usage of these templates is in function object adapters,
thus allowing them to adapt plain functions as well as function objects.
You can do this by wherever you would normally write, for example,</p>
<blockquote>
<pre>
typename Operation::argument_type
</pre>
</blockquote>
<p>simply writing</p>
<blockquote>
<pre>
typename boost::unary_traits&lt;Operation&gt;::argument_type
</pre>
</blockquote>
<p>instead.</p>
<h3>Additional Types Defined</h3>
<p>In addition to the standard result and argument typedefs, these traits
templates define two additional types.</p>
<h4><tt>function_type</tt></h4>
<p>This is the type of the function or function object, and can be used in
declarations such as</p>
<blockquote>
<pre>
template &lt;class Predicate&gt;
class unary_negate : // ...
{
// ...
private:
<strong>typename unary_traits&lt;Predicate&gt;::function_type</strong> pred;
};
</pre>
</blockquote>
<p>If this typedef were not provided, it would not be possible to declare
<tt>pred</tt> in a way that would allow <tt>unary_negate</tt> to be
instantiated with a function type (see the C++ Standard &sect;14.3.1
&para;3).</p>
<h4><tt>param_type</tt></h4>
<p>This is a type suitable for passing the function or function object as a
parameter to another function. For example,</p>
<blockquote>
<pre>
template &lt;class Predicate&gt;
class unary_negate : // ...
{
public:
explicit unary_negate(<strong>typename unary_traits&lt;Predicate&gt;::param_type</strong> x)
:
pred(x)
{}
// ...
};
</pre>
</blockquote>
<p>Function objects are passed by reference to const; function pointers are
passed by value.</p>
<h3>Limitations</h3>
<p>This library uses these traits within all function object adapters,
theoretically rendering <tt>ptr_fun</tt> obsolete. However, third party
adapters probably won't take advantage of this mechanism, and so
<tt>ptr_fun</tt> may still be required. Accordingly, this library also
provides <a href="ptr_fun.html">improved versions of the standard function
pointer adapters</a>.</p>
<p>These traits templates will also not work with compilers that fail to
support partial specialisation of templates. With these compilers, the
traits templates can only be instantiated with adaptable function objects,
thus requiring <tt>ptr_fun</tt> to be used, even with the function object
adapters in this library.</p>
<hr>
<p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src=
"http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional"
height="31" width="88"></a></p>
<p>Revised
<!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->02
December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38510" --></p>
<p><i>Copyright &copy; 2000 Cadenza New Zealand Ltd.</i></p>
<p><i>Distributed under the Boost Software License, Version 1.0. (See
accompanying file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or
copy at <a href=
"http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p>
</body>
</html>