Tuesday, 20 February 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

casting - Why wasn't Tobey Maguire in The Amazing Spider-Man? - Movies & TV

In the Spider-Man franchise, Tobey Maguire is an outstanding performer as a Spider-Man and also reprised his role in the sequels Spider-Man...