Boost logo

Boost Users :

From: Reusser, Edward (Edward.Reusser_at_[hidden])
Date: 2006-11-29 18:52:21


This email was an eye popper for me because I have never had any luck
declaring a template function in a header file and defining the
implementation in a cpp file. I either get compilation/link errors, or
very odd run-time problems. My understanding is that many compilers (of
which mine, the MSVC 7.1 compiler) simply cannot handle this situation
at all. I have always had to include the actual implementation of the
template function inside the header file, which is a real pain.

Note that this has nothing to do with the serialization per se. Are
other people finding that newer compilers are finally able to handle
this? I have several projects that I could improve by splitting the
implementation code away from the headers.

Ed

-----Original Message-----
From: Robert Ramey [mailto:ramey_at_[hidden]]
Sent: Wednesday, November 29, 2006 8:33 AM
To: boost-users_at_[hidden]
Subject: Re: [Boost-users] serialize explicit template instantiation

I just compiled, linked and ran the following program on my system:

vc 7.1
Boost 1.35 - HEAD

There was no need to explicitly instantiate anything.

Robert Ramey

#include <boost/serialization/string.hpp>
#include <boost/serialization/base_object.hpp>
#include <boost/serialization/utility.hpp>
#include <boost/serialization/version.hpp>
class CSerTest
{
std::string a_, b_, c_;
friend class boost::serialization::access;
template<class Archive>
void serialize( Archive & ar, const unsigned int );
public:
CSerTest();
};
BOOST_CLASS_VERSION(CSerTest, 1);
// Class.cpp
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
CSerTest::CSerTest() : a_("1"), b_("2"), c_("3")
{
}
template<class Archive>
void CSerTest::serialize( Archive & ar, const unsigned int )
{
ar & BOOST_SERIALIZATION_NVP(a_) & BOOST_SERIALIZATION_NVP(b_) &
BOOST_SERIALIZATION_NVP(c_);
}
// main.cpp
#include <fstream>
///////////////////////// without effect
////////////////////////////////////
//template void
CSerTest::serialize<boost::archive::xml_oarchive>(boost::archive::xml_oa
rchive&,
unsigned int );
int main()
{
const CSerTest instance;
std::ofstream ofs( "out_file.txt" );
boost::archive::xml_oarchive oxa( ofs );
oxa << BOOST_SERIALIZATION_NVP(instance);
}

The information contained in or attached to this email may be subject to the Export Administration Regulations (EAR), administered by the U.S. Department of Commerce, or the International Traffic in Arms Regulations (ITAR), administered by the U.S. Department of State, and may require an export license from the Commerce or State Department prior to its export. An export can include a release or disclosure to a foreign national inside or outside the United States. Include this notice with any reproduced portion of this information.


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