mirror of
https://github.com/boostorg/utility.git
synced 2025-05-09 15:04:00 +00:00
added missing typename's to docs
[SVN r9324]
This commit is contained in:
parent
61243bd15f
commit
b5ed77985e
@ -34,9 +34,9 @@ specialization or member templates, no benefit will occur from
|
|||||||
using call_traits: the call_traits defined types will always be
|
using call_traits: the call_traits defined types will always be
|
||||||
the same as the existing practice in this case. In addition if
|
the same as the existing practice in this case. In addition if
|
||||||
only member templates and not partial template specialisation is
|
only member templates and not partial template specialisation is
|
||||||
support by the compiler (for example Visual C++ 6) then call_traits
|
support by the compiler (for example Visual C++ 6) then
|
||||||
can not be used with array types (although it can be used to
|
call_traits can not be used with array types (although it can be
|
||||||
solve the reference to reference problem).</p>
|
used to solve the reference to reference problem).</p>
|
||||||
|
|
||||||
<table border="0" cellpadding="7" cellspacing="1" width="797">
|
<table border="0" cellpadding="7" cellspacing="1" width="797">
|
||||||
<tr>
|
<tr>
|
||||||
@ -79,7 +79,8 @@ solve the reference to reference problem).</p>
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td valign="top" width="17%"><p align="center">const T&<br>
|
<td valign="top" width="17%"><p align="center">const
|
||||||
|
T&<br>
|
||||||
(return value)</p>
|
(return value)</p>
|
||||||
</td>
|
</td>
|
||||||
<td valign="top" width="35%"><p align="center"><code>call_traits<T>::const_reference</code></p>
|
<td valign="top" width="35%"><p align="center"><code>call_traits<T>::const_reference</code></p>
|
||||||
@ -91,7 +92,8 @@ solve the reference to reference problem).</p>
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td valign="top" width="17%"><p align="center">const T&<br>
|
<td valign="top" width="17%"><p align="center">const
|
||||||
|
T&<br>
|
||||||
(function parameter)</p>
|
(function parameter)</p>
|
||||||
</td>
|
</td>
|
||||||
<td valign="top" width="35%"><p align="center"><code>call_traits<T>::param_type</code></p>
|
<td valign="top" width="35%"><p align="center"><code>call_traits<T>::param_type</code></p>
|
||||||
@ -332,8 +334,8 @@ possible:</p>
|
|||||||
<p>The following table shows the effect that call_traits has on
|
<p>The following table shows the effect that call_traits has on
|
||||||
various types, the table assumes that the compiler supports
|
various types, the table assumes that the compiler supports
|
||||||
partial specialization: if it doesn't then all types behave in
|
partial specialization: if it doesn't then all types behave in
|
||||||
the same way as the entry for "myclass", and call_traits
|
the same way as the entry for "myclass", and
|
||||||
can not be used with reference or array types.</p>
|
call_traits can not be used with reference or array types.</p>
|
||||||
|
|
||||||
<table border="0" cellpadding="7" cellspacing="1" width="766">
|
<table border="0" cellpadding="7" cellspacing="1" width="766">
|
||||||
<tr>
|
<tr>
|
||||||
@ -388,7 +390,8 @@ can not be used with reference or array types.</p>
|
|||||||
</td>
|
</td>
|
||||||
<td valign="top" width="17%"><p align="center">int&</p>
|
<td valign="top" width="17%"><p align="center">int&</p>
|
||||||
</td>
|
</td>
|
||||||
<td valign="top" width="17%"><p align="center">const int&</p>
|
<td valign="top" width="17%"><p align="center">const
|
||||||
|
int&</p>
|
||||||
</td>
|
</td>
|
||||||
<td valign="top" width="17%"><p align="center">int const</p>
|
<td valign="top" width="17%"><p align="center">int const</p>
|
||||||
</td>
|
</td>
|
||||||
@ -420,7 +423,8 @@ can not be used with reference or array types.</p>
|
|||||||
</td>
|
</td>
|
||||||
<td valign="top" width="17%"><p align="center">int&</p>
|
<td valign="top" width="17%"><p align="center">int&</p>
|
||||||
</td>
|
</td>
|
||||||
<td valign="top" width="17%"><p align="center">const int&</p>
|
<td valign="top" width="17%"><p align="center">const
|
||||||
|
int&</p>
|
||||||
</td>
|
</td>
|
||||||
<td valign="top" width="17%"><p align="center">int&</p>
|
<td valign="top" width="17%"><p align="center">int&</p>
|
||||||
</td>
|
</td>
|
||||||
@ -432,13 +436,17 @@ can not be used with reference or array types.</p>
|
|||||||
<td valign="top" width="17%" bgcolor="#C0C0C0"><p
|
<td valign="top" width="17%" bgcolor="#C0C0C0"><p
|
||||||
align="center">const int&</p>
|
align="center">const int&</p>
|
||||||
</td>
|
</td>
|
||||||
<td valign="top" width="17%"><p align="center">const int&</p>
|
<td valign="top" width="17%"><p align="center">const
|
||||||
|
int&</p>
|
||||||
</td>
|
</td>
|
||||||
<td valign="top" width="17%"><p align="center">const int&</p>
|
<td valign="top" width="17%"><p align="center">const
|
||||||
|
int&</p>
|
||||||
</td>
|
</td>
|
||||||
<td valign="top" width="17%"><p align="center">const int&</p>
|
<td valign="top" width="17%"><p align="center">const
|
||||||
|
int&</p>
|
||||||
</td>
|
</td>
|
||||||
<td valign="top" width="17%"><p align="center">const int&</p>
|
<td valign="top" width="17%"><p align="center">const
|
||||||
|
int&</p>
|
||||||
</td>
|
</td>
|
||||||
<td valign="top" width="17%"><p align="center">All
|
<td valign="top" width="17%"><p align="center">All
|
||||||
constant-references.</p>
|
constant-references.</p>
|
||||||
@ -486,8 +494,8 @@ can not be used with reference or array types.</p>
|
|||||||
|
|
||||||
<p>The following class is a trivial class that stores some type T
|
<p>The following class is a trivial class that stores some type T
|
||||||
by value (see the <a href="call_traits_test.cpp">call_traits_test.cpp</a>
|
by value (see the <a href="call_traits_test.cpp">call_traits_test.cpp</a>
|
||||||
file), the aim is to illustrate how each of the available call_traits
|
file), the aim is to illustrate how each of the available
|
||||||
typedefs may be used:</p>
|
call_traits typedefs may be used:</p>
|
||||||
|
|
||||||
<pre>template <class T>
|
<pre>template <class T>
|
||||||
struct contained
|
struct contained
|
||||||
@ -523,14 +531,14 @@ problem):</h4>
|
|||||||
|
|
||||||
<pre>template <class Operation>
|
<pre>template <class Operation>
|
||||||
class binder1st :
|
class binder1st :
|
||||||
public unary_function<Operation::second_argument_type, Operation::result_type>
|
public unary_function<typename Operation::second_argument_type, typename Operation::result_type>
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
Operation op;
|
Operation op;
|
||||||
Operation::first_argument_type value;
|
typename Operation::first_argument_type value;
|
||||||
public:
|
public:
|
||||||
binder1st(const Operation& x, const Operation::first_argument_type& y);
|
binder1st(const Operation& x, const typename Operation::first_argument_type& y);
|
||||||
Operation::result_type operator()(const Operation::second_argument_type& x) const;
|
typename Operation::result_type operator()(const typename Operation::second_argument_type& x) const;
|
||||||
}; </pre>
|
}; </pre>
|
||||||
|
|
||||||
<p>Now consider what happens in the relatively common case that
|
<p>Now consider what happens in the relatively common case that
|
||||||
@ -541,7 +549,7 @@ reference to a reference as an argument, and that is not
|
|||||||
currently legal. The solution here is to modify <code>operator()</code>
|
currently legal. The solution here is to modify <code>operator()</code>
|
||||||
to use call_traits:</p>
|
to use call_traits:</p>
|
||||||
|
|
||||||
<pre>Operation::result_type operator()(call_traits<Operation::second_argument_type>::param_type x) const;</pre>
|
<pre>typename Operation::result_type operator()(typename call_traits<typename Operation::second_argument_type>::param_type x) const;</pre>
|
||||||
|
|
||||||
<p>Now in the case that <code>Operation::second_argument_type</code>
|
<p>Now in the case that <code>Operation::second_argument_type</code>
|
||||||
is a reference type, the argument is passed as a reference, and
|
is a reference type, the argument is passed as a reference, and
|
||||||
@ -575,9 +583,9 @@ std::pair<
|
|||||||
degraded to pointers if the deduced types are arrays, similar
|
degraded to pointers if the deduced types are arrays, similar
|
||||||
situations occur in the standard binders and adapters: in
|
situations occur in the standard binders and adapters: in
|
||||||
principle in any function that "wraps" a temporary
|
principle in any function that "wraps" a temporary
|
||||||
whose type is deduced. Note that the function arguments to make_pair
|
whose type is deduced. Note that the function arguments to
|
||||||
are not expressed in terms of call_traits: doing so would prevent
|
make_pair are not expressed in terms of call_traits: doing so
|
||||||
template argument deduction from functioning.</p>
|
would prevent template argument deduction from functioning.</p>
|
||||||
|
|
||||||
<h4><a name="ex4"></a>Example 4 (optimising fill):</h4>
|
<h4><a name="ex4"></a>Example 4 (optimising fill):</h4>
|
||||||
|
|
||||||
@ -666,10 +674,10 @@ be any worse than existing practice.</p>
|
|||||||
<p>Pointers follow the same rational as small built-in types.</p>
|
<p>Pointers follow the same rational as small built-in types.</p>
|
||||||
|
|
||||||
<p>For reference types the rational follows <a href="#refs">Example
|
<p>For reference types the rational follows <a href="#refs">Example
|
||||||
2</a> - references to references are not allowed, so the call_traits
|
2</a> - references to references are not allowed, so the
|
||||||
members must be defined such that these problems do not occur.
|
call_traits members must be defined such that these problems do
|
||||||
There is a proposal to modify the language such that "a
|
not occur. There is a proposal to modify the language such that
|
||||||
reference to a reference is a reference" (issue #106,
|
"a reference to a reference is a reference" (issue #106,
|
||||||
submitted by Bjarne Stroustrup), call_traits<T>::value_type
|
submitted by Bjarne Stroustrup), call_traits<T>::value_type
|
||||||
and call_traits<T>::param_type both provide the same effect
|
and call_traits<T>::param_type both provide the same effect
|
||||||
as that proposal, without the need for a language change (in
|
as that proposal, without the need for a language change (in
|
||||||
@ -687,11 +695,11 @@ struct A
|
|||||||
void foo(T t);
|
void foo(T t);
|
||||||
};</pre>
|
};</pre>
|
||||||
|
|
||||||
<p><font face="Times New Roman">In this case if we instantiate A<int[2]>
|
<p><font face="Times New Roman">In this case if we instantiate
|
||||||
then the declared type of the parameter passed to member function
|
A<int[2]> then the declared type of the parameter passed to
|
||||||
foo is int[2], but it's actual type is const int*, if we try to
|
member function foo is int[2], but it's actual type is const int*,
|
||||||
use the type T within the function body, then there is a strong
|
if we try to use the type T within the function body, then there
|
||||||
likelyhood that our code will not compile:</font></p>
|
is a strong likelyhood that our code will not compile:</font></p>
|
||||||
|
|
||||||
<pre>template <class T>
|
<pre>template <class T>
|
||||||
void A<T>::foo(T t)
|
void A<T>::foo(T t)
|
||||||
@ -706,13 +714,13 @@ declared type:</p>
|
|||||||
<pre>template <class T>
|
<pre>template <class T>
|
||||||
struct A
|
struct A
|
||||||
{
|
{
|
||||||
void foo(call_traits<T>::value_type t);
|
void foo(typename call_traits<T>::value_type t);
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
void A<T>::foo(call_traits<T>::value_type t)
|
void A<T>::foo(typename call_traits<T>::value_type t)
|
||||||
{
|
{
|
||||||
call_traits<T>::value_type dup(t); // OK even if T is an array type.
|
typename call_traits<T>::value_type dup(t); // OK even if T is an array type.
|
||||||
}</pre>
|
}</pre>
|
||||||
|
|
||||||
<p>For value_type (return by value), again only a pointer may be
|
<p>For value_type (return by value), again only a pointer may be
|
||||||
|
Loading…
x
Reference in New Issue
Block a user