I've read over the compile time trap section of the docs, but I still can't
get my serialization code to compile. The code to save my std::map
compiles, but the code to load the map asserts on the compile. As far as I
can tell, I'm not doing anything wrong (save with const ref, load with
non-const ref).
I will try to summarize my serialization code below:
#include
#include
#include
#include
struct DLL_EXPORT Node
{
friend class boost::serialization::access;
unsigned int handle; // handle of current object
std::string name; // name of object
std::string value; // optional value of object
template <typename Archive>
void serialize(Archive& ar, const unsigned int version)
{
ar & handle;
ar & name;
ar & value;
}
};
class DLL_EXPORT Manager
{
// manager node adds a few extra things used in management of each
object
struct ManagerNode : public Node
{
friend class boost::serialization::access;
private:
template <typename Archive>
void serialize(Archive& ar, const unsigned int version)
{
// serialize base class information
ar & boost::serialization::base_object <Node>
(*this);
}
};
NodeMap * _nodes;
// this method compiles fine
void save(const std::string & filename)
{
std::ofstream outFile;
outFile.open(filename.c_str(), std::ios::binary);
boost::archive::text_oarchive archiveFile(outFile);
const NodeMap * const n = _nodes;
archiveFile << *n;
}
// fails on compile with STATIC_ASSERTION_FAILURE
void load(const std::string & filename)
{
std::ifstream inFile;
inFile.open(filename.c_str(), std::ios::binary);
boost::archive::text_iarchive archiveFile(inFile);
_nodes->clear();
archiveFile >> *_nodes;
}
};
This is on Windows XP using Visual Studio 7.1. The errors start like this:
..\API\inc\boost\archive\detail\iserializer.hpp(557) : error C2027: use of
undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'
with
[
x=false
]
..\API\inc\boost\archive\detail\iserializer.hpp(557) : see reference
to class template instantiation 'boost::STATIC_ASSERTION_FAILURE<x>' being
compiled
with
[
x=false
]
..\API\inc\boost\archive\basic_text_iarchive.hpp(64) : see reference
to function template instantiation 'void
boost::archive::load(Archive &,T &)' being compiled
with
[
Archive=boost::archive::text_iarchive,
T=const unsigned int
]
..\API\inc\boost\archive\text_iarchive.hpp(64) : see reference to
function template instantiation 'void
boost::archive::basic_text_iarchive<Archive>::load_override<T>(T &,int)'
being compiled
** snipped for brevity **
Any help would be greatly appreciated.
Scott