Instantiation of Template Member Function
In Class. H: Class Class { Public: Template Void Function(T Value); }; in Class. Cpp: Template Void Class: :Function(T Value) { // Do Sth } in Main. Cpp...
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 linked error because Class.cpp never instantiate void Class::function<int>(T).
You can explicitly instantiate a template class with :
template class std::vector<int>;
How do you explicitly instantiate a template member of a non-template class ?
Thanks,
2 Answers
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.
Have you tried with the following in Class.cpp?
template void Class::function<int>(int value);