Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
433 views
in Technique[技术] by (71.8m points)

c++ - Instantiation of template member function

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

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

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...