Fact: As the title says, whenever you specialize a templated function, you explicitly instantiate it as well.
What's the practical implication? You can just compile the specialization separately and link it to the main program. This property was invaluable in my case where I wanted to use different compilers for different parts of my code (hence I can not just include every template function).
How do you do it?
Inside main.cpp:
template <unsigned TT>
void foo(/*bunch of parameters*/) {}; // dummy base template
template <>
void foo<2>(/*bunch of parameters*/); // only the declaration
Inside side.cpp
template <unsigned TT>
void foo(/*bunch of parameters*/); // declaration of base template
template <>
void foo<2>(/*bunch of parameters*/)
{ /* lots of code */ }
Monday, August 30, 2010
Subscribe to:
Posts (Atom)