|
Boost : |
From: Jens Maurer (Jens.Maurer_at_[hidden])
Date: 2000-06-16 15:49:49
I think the library is useful. The "references to references"
problem bit me a few months ago as well, and it's a pain.
Likewise, the library adds missing function traits classes similar
to iterator_traits, which fixes an asymmetry.
I vote for approval into boost.
Here are some detailed comments:
Documentation
-------------
General: Is there any boost preference which English language
variation to use (US -ize vs. British -ise etc.)?
index.htm: I would add an express reference to section 20.3
[lib.function.objects] of the C++ standard for the uninitiated.
There's a slight HTML buglet at the end of the "Contents" section
( "/li>" shows ).
I would find it helpful to have a list of compilers with which this
library is known to work. In particular, missing partial specialization
seems to leave use of "ptr_fun" required.
I would add an explanatory note that libraries allowing LISP-
like lambda-expressions with a more natural syntax are currently
under development, but these may not work with certain popular
compilers.
Is there any reason why this file is called "index.htm", but the
rest has the (IMHO proper) ".html" suffix?
function_traits.html: "... slightly different due [to] constraints"
I'm not a native speaker, but isn't the "to" is required?
The documentation should list all the relevant typedef's
of the two traits classes in a concise "Synopsis" or
somesuch. Not an "example" and not an incomplete listing
which is later augmented by "Other Types Defined". I would
also prefer an abstract description of each typedef such as
"result_type is the return type of the Operation functional
given as a template parameter" (please adjust wording to taste)
before delving into "Usage" examples. This abstract
description should also encompass the additional "function_type"
and "param_type" typedef's.
The description of "function_type" has an incomplete sentence
at the end: "If this typedef was not provided, ???". For
additional English beauty, try "If this typedef were not
provided, ...".
Please add the BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
limitation to the "Limitations" section.
negators.html: Please add an express reference to std:20.3.5
[lib.negators].
The example has the template argument(s) of std::vector
eaten as HTML markup. Use < and friends to be happy.
I would not hide the explanation why your re-implemenation
is better in the "Usage" section, but put it right on top
after the "not1, not2" listing.
In section "Argument Passing", "Accordingly, the negators in this
library (mem_fun1_t and its variants)...". It is news to
me that "mem_fun1_t" is a negator.
I find the "Argument passing" section not very easy to
understand. I would suggest a "Synopsis" section with
complete declarations so that the use of call_traits::param_type
becomes clear.
binders.html: Please add an express reference to std:20.3.6
[lib.binders].
The example has the template argument(s) of std::vector
eaten as HTML markup. Use < and friends to be happy.
I would suggest a "Synopsis" section with complete declarations.
mem_fun.html: Please add an express reference to std:20.3.8
[lib.member.pointer.adaptors].
I would augment "The first_argument_type typedef has been
corrected" with "for the const_* member function adapters"
so that things are put into perspective.
The "first_argument_type" section is nice.
I don't think that a "Synopsis" section would be good here,
because it would contain too many tedious repetitions.
I would rework the first part of "Argument Passing", because
it presents the tool (for the solution of the problem) before
the problem itself.
ptr_fun.html: Please add an express reference to std:20.3.7
[lib.function.pointer.adaptors].
In the example, I don't see why using boost::ptr_fun instead
of std::ptr_fun provides any advantage.
I would suggest a "Synopsis" section with complete declarations
so that the enhancement is clearly visible.
The "Argument Passing" section is somewhat difficult to
understand.
"Accordingly, the function pointer adapters in this library
(mem_fun1_t and its variants) ..." It is news to me that
"mem_fun1_t" is a function pointer adapter.
Implementation
--------------
functional.hpp: I would add a comment to the namespace-closing
braces, like so: " } // namespace detail ". These braces
are among the most farthest away from their opening counterpart,
so a little help for the code reader might be nice.
Same for the include guard "#endif".
I would add the "BCC workaround" comment to not2 and everywhere
else it applies as well.
function_test.cpp: Is there any reason why the
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION is repeated
multiple times instead of excluding larger codeblocks?
You seem to have a std::cout << "\n" before every output.
Wouldn't it be better to have it after? In particular,
that would add the missing newline at the end of the
program output. While you are at it,
std::cout << ´\n´
(i.e. output only a char, not a string) is supposed to
be faster.
Miscellaneous
-------------
I'm not happy to have a Borland project file with the distribution.
Usually, boost libraries don't have any build support at all,
and it seems odd to just provide a Borland project file and not,
say, a traditional Makefile. This whole issue should be postponed
until the regression test framework is established, which should
have some kind of build support anyway.
Jens Maurer
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk