Sunday 5 May 2019

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

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...