模板成员函数的实例化

TiM*_*och 35 c++ templates

Class.h:

class Class {
public:
    template <typename T> void function(T value);
};
Run Code Online (Sandbox Code Playgroud)

Class.cpp:

template<typename T> void Class::function(T value) {
    // do sth
}
Run Code Online (Sandbox Code Playgroud)

main.cpp:

#include "Class.h"

int main(int argc, char ** argv) {
    Class a;
    a.function(1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到一个链接错误,因为Class.cpp从未实例化void Class::function<int>(T).您可以使用以下命令显式实例化模板类:

template class std::vector<int>;
Run Code Online (Sandbox Code Playgroud)

如何显式实例化非模板类的模板成员?

谢谢,

And*_*owl 50

您可以在以下语法中使用以下语法Class.cpp:

template void Class::function(int);
Run Code Online (Sandbox Code Playgroud)

由于类型推导,模板参数可以省略,适用于函数模板.因此,以上相当于以下内容,更简洁:

template void Class::function<int>(int);
Run Code Online (Sandbox Code Playgroud)

请注意,没有必要指定函数参数的名称 - 它们不是函数(或函数模板)签名的一部分.


Did*_*set 6

您是否尝试过以下内容Class.cpp

template void Class::function<int>(int value);
Run Code Online (Sandbox Code Playgroud)

  • 没关系,这确实有效.在我的makefile中发生了一次错误...我现在觉得很傻: - | (2认同)