Re: [Boost-users] serialize explicit template instantiation

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@rrsd.com]
Sent: Wednesday, November 29, 2006 8:33 AM
To: boost-users@lists.boost.org
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

Reusser, Edward wrote:
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.
What has worked well for me is the following: a) declare the template in the header. b) instantiate it in a *.cpp file Works - but can lead to multiply defined symbols a link time. So I use: a) declare template in header. b) create "implementation" *.ipp file e) create *.cpp which i) includes the *.ipp file ii) explicitly instantiate the template. This is used to add precompiled instantiations to the serialization libraries. The serialiation library uses this for all compilers going back to msvc 6.0 and borland 5.51. Robert Ramey

a) declare template in header. b) create "implementation" *.ipp file e) create *.cpp which i) includes the *.ipp file ii) explicitly instantiate the template. This is used to add precompiled instantiations to the serialization libraries.
how can you istantiate the template if you don't have the concrete type yet? ... or have I missed something obvious? thanks for your info, Marco
participants (3)
-
Marco De Paoli
-
Reusser, Edward
-
Robert Ramey