Boost logo

Boost Users :

From: Hugh Hoover (hugh_at_[hidden])
Date: 2006-03-01 19:47:06


On Mar 1, 2006, at 00:59, RIVASSEAU Jean Noel wrote:

> I quote the Boost serialization docs:
>
>
>
> When serializing an object through a pointer to its base class and
> that base class is abstract (i.e. has at least one virtual function
> assigned a value of 0), A compile error will be emitted. This is
> addressable in one over several ways:
>
> * remove the =0 in the base classes so that the base class is no
> longer abstract.
> * implement is_abstract for your compiler. (code written according
> to the C++ standard is included with this library. But it is known
> to fail on several compilers.
> * use the macro BOOST_IS_ABSTRACT(my_class) to indicate that the
> class is an abstract base class. This will cause the compiler to
> avoid generating code that causes this error.
>
> I still do not understand part 2 of this advice, Robert. Could you
> explain?

The BOOST_IS_ABSTRACT macro expands into a specialization of the
is_abstract template (in is_abstract.hpp) for the specified class,
and returns mpl::bool<true> for the specified type.

I think part 2 is a suggestion that a more general template may be
written on a per-platform basis that properly returns mpl::bool<true>
when the class is derived from an abstract base class. It's left as
an exercise for the reader :) I'm not up to it right now myself...

> Ps: as already mentioned, part 3 does not change anything for me,
> and I'd like to avoid the solution of part 1 since I do want the
> base class to be abstract.

I've found that it doesn't matter if you use BOOST_IS_ABSTRACT on the
actual abstract base class, but you MUST (currently - 1.33.0) on the
DERIVED class to get it to work "correctly".

I'd consider this a bug, but I'm not sure of the specification and
haven't had time to research it.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net