Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2005-09-06 12:54:47

"Robert Ramey" <ramey_at_[hidden]> writes:

>>> Note that his concept is different than others in the standard
>>> library in that one of the requirements is that it be a class with
>>> certain required member functions.
>>> Most or all other concept definitions only specify
>>> operations for which the type is valid. As far as I know this doesn't
>>> include supporting specific member functions.
>> Actually, no. All of the concepts in the Container hierarchy share
>> that property.
> Of course. And I did study the SGI documentation in that regard. Now that
> I think about, I'm sure this is where I got the idea to do it this way.

Then why not use the generally accepted and understood format for
describing concepts?

>> Well, CRTP might be a good option for you, especially considering that
>> function implementation I mentioned in the first paragraph above.
> As I said, Ive used CRTP in the implementation. But I could imagine someone
> making an archive class that didn't use CRTP and still have the archive
> function. So I see it as an implementation detail rather than part of the
> concept.

If it is not somehow part of the concept requirements that the archive
have boost::serialization as an associated namespace, their
boost::serialization::serialize() won't be considered as a candidate
overload on a conforming compiler.

>> So the question is, does the user actually need to use default
>> arguments where your interface description does, or would overloads
>> work just as well? Since you don't have a description of how to
>> interpret your prototype, the answer is unclear.
> The only default argument is
> register_type(T * t = NULL);
> and its only there because many compilers don't accept the syntax:
> ar.template register_type<T>()
> Its optional to support compilers that do support the above syntax. So I
> guess that should be explained.

It should be explained carefully. Does the serialization library call
register_type differently on those other compilers?

IMO you'd be better off simply leaving out "template" on those
compilers, if you can get away with it.


Dave Abrahams
Boost Consulting

Boost list run by bdawes at, gregod at, cpdaniel at, john at