I can't do that.
It gives me a compilation error. My IArchive class is pure virtual and
without templates..
I just don't now how to turn around this mess :P.
Running out of ideas. Recapitulating:
I have a pure virtual class IArchive with the funtions:
virtual void Serialize(int & t) = 0;
...
virtual void Serialize(Serializer& t) = 0;
virtual void Serialize(Serializer* t) = 0;
And my BinaryOArchive extends the IArchive Class and the
binary_oarchive_impl like:
class BinaryArchiveO : public IArchive,
// don't derive from binary_oarchive !!!
public boost::archive::binary_oarchive_impl<BinaryArchiveO>
{
public:
BinaryArchiveO(std::ostream & os, unsigned flags = 0) :
boost::archive::binary_oarchive_impl<BinaryArchiveO>(os, flags)
{}
FE_SERIALIZATION_SERIALIZE;
virtual void Serialize(void * data, size_t size)
{
save_binary(data, size);
}
};
the macro FE_SERIALIZATION_SERIALIZE; is the implementation of the
Serialize basic type functions:
virtual void Serialize(Quaternion& t) { *this & BOOST_SERIALIZATION_NVP(t.q); }\
virtual void Serialize(Serializer* t){*this & BOOST_SERIALIZATION_NVP(t);}
...
And I have the classes I want to serialize derived by the Serializer class:
like:
class C : public Serializer
{
typedef Serializer Parent;
public:
std::string text;
A* m_owner;
int32 dasse;
Vector<float> vector_test;
C():m_owner(0)
{
text = "Ola sua puta rabeta!";
dasse = 69;
vector_test.push_back(1);
vector_test.push_back(1.2f);
vector_test.push_back(1.3f);
vector_test.push_back(1.4f);
}
void Serialize(IArchive& ar, const unsigned int version)
{
//ar.template register_type<C>();
ar.Serialize(dasse);
ar.Serialize(text);
//ar.Serialize(m_owner);
//ar.Serialize(vector_test);
}
};
but if I do something like:
int SilvTask::WriteObject()
{
Serializer* testC = new C();
std::ofstream ofs(m_filename.c_str());
TextArchiveO oa(ofs);
oa & BOOST_SERIALIZATION_NVP(testC);
return FE_OK;
}
It gives me a cast_exception or a class_exception as I said.
:S
On 1/15/07, Robert Ramey
Try the following:
class A : public Serializer { typedef Serializer Parent; public:
void Serialize(IArchive& ar, const unsigned int version) { ar.template register_type<C>(); ar.Serialize(dumbi); ar.Serialize(vectorTest); ar.Serialize(matrix); ar.Serialize(testing); ar.Serialize((void*)test_void, sizeof(Vector3f)); }
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
-- Miguel Silvestre