How do you explicitly instantiate a member function template?

c++, c++-templates, explicit-instantiation, function-templates

Solution

You can use the following syntax in `Class.cpp`:

template void Class::function(int);

The template argument can be omitted because of type deduction, which works for function templates. Thus, the above is equivalent to the following, just more concise:

template void Class::function<int>(int);

Notice, that it is not necessary to specify the names of the function parameters - they are not part of a function's (or function template's) signature.

Problem

In `Class.h`: ``` class Class { public: template <typename T> void function(T value); }; ``` In `Class.cpp`: ``` template<typename T> void Class::function(T value) { // do sth } ``` In `main.cpp`: ``` #include "Class.h" int main(int argc, char ** argv) { Class a; a.function(1); return 0; } ``` I get a linker error because `Class.cpp` never instantiates `void Class::function<int>(T)`. You can explicitly instantiate a class template with : ``` template class std::vector<int>; ``` How do you explicitly instantiate a member template of a non-template class ?

Original source