Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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,

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
441 views
Welcome To Ask or Share your Answers For Others

1 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>(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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...