The compiler implicitly instantiates templates only for those combinations of template arguments that are actually used. This approach may be inappropriate for the construction of libraries that provide templates. C++ provides a facility to explicitly instantiate templates, as seen in the following examples.
To instantiate a template function explicitly, follow the template keyword by a declaration (not definition) for the function, with the function identifier followed by the template arguments.
template float twice<float>(float original); |
Template arguments may be omitted when the compiler can infer them.
template int twice(int original); |
To instantiate a template class explicitly, follow the template keyword by a declaration (not definition) for the class, with the class identifier followed by the template arguments.
template class Array<char>; |
template class String<19>; |
When you explicitly instantiate a class, all of its members are also instantiated.
To explicitly instantiate a template class function member, follow the template keyword by a declaration (not definition) for the function, with the function identifier qualified by the template class, followed by the template arguments.
template int Array<char>::GetSize(); |
template int String<19>::length(); |
To explicitly instantiate a template class static data member, follow the template keyword by a declaration (not definition) for the member, with the member identifier qualified by the template class, followed by the template argument.
template int String<19>::overflows; |