Thursday, 21 April 2016

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

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...