|
Boost Users : |
From: RIVASSEAU Jean Noel (JN.RIVASSEAU_at_[hidden])
Date: 2006-03-02 04:50:41
Since the demo doesn't use BOOST_EXPORT, I
suspect that
that there is some sort of problem related to instantiation of abstract base
class code
for exported types. I'lll look into it.
If you can look into it, thank you, Robert.
I have finished the organization of my (big) project serialization into separate files for each class, and now everything is working fine ! :)
However, I still have the problem that every time I use a std::vector of pointers, and serialize it as such, there is a compile time error, since extended_type_info for the std::vector is not defined. This is a bug since type info should not matter here.
My workaround was to use a
BOOST_CLASS_TYPE_INFO(std::vector< ClassPointedTo *>, extended_type_info_no_rtti< std::vector< ClassPointedTo *> >)
everytime such a vector occurs.
However, if you can look into this problem and fix it, Robert, this would appreciated. I could then remove my workaround code, which makes my code ugly :)
Jean-Noël
-----Message d'origine-----
De : boost-users-bounces_at_[hidden] [mailto:boost-users-bounces_at_[hidden]] De la part de Robert Ramey
Envoyé : jeudi 2 mars 2006 03:49
À : boost-users_at_[hidden]
Objet : Re: [Boost-users] Serialization: docs regarding abstract base class
Note that the tutorial programs do use BOOST_IS_ABSTRACT so I've always
assumed that
it functions as advertised. Since the demo doesn't use BOOST_EXPORT, I
suspect that
that there is some sort of problem related to instantiation of abstract base
class code
for exported types. I'lll look into it.
Robert Ramey
"RIVASSEAU Jean Noel" <JN.RIVASSEAU_at_[hidden]> wrote in message
news:87F60F7FA02FF749AFB02BD9FCAA6B04DE1BE3_at_naserv31.nanterre.oberthurcs.com...
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.
If the compiler suports "is_abstract" type trait - use that.
Otherwise assume a class is NOT abstract
unless BOOST_IS_ABSTRACT has been set for the class.
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?
Jean-Noël
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.
_______________________________________________
Boost-users mailing list
Boost-users_at_[hidden]
http://lists.boost.org/mailman/listinfo.cgi/boost-users
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