Tuesday, July 31, 2018

c++ - 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:



#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(T).
You can explicitly instantiate a template class with :



template class std::vector;


How do you explicitly instantiate a template member of a non-template class ?



Thanks,


Answer



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);


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.


No comments:

Post a Comment

plot explanation - Why did Peaches' mom hang on the tree? - Movies & TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...