【问题标题】:Instantiation of template member function模板成员函数的实例化
【发布时间】:2013-04-12 14:32:26
【问题描述】:

Class.h:

class Class {
public:
    template <typename T> void function(T value);
};

Class.cpp:

template<typename T> void Class::function(T value) {
    // do sth
}

main.cpp:

#include "Class.h"

int main(int argc, char ** argv) {
    Class a;
    a.function(1);
    return 0;
}

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

template class std::vector<int>;

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

谢谢,

【问题讨论】:

标签: c++ templates


【解决方案1】:

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

template void Class::function(int);

模板参数可以省略,因为类型推导适用于函数模板。因此,上面等价于下面,只是更简洁:

template void Class::function<int>(int);

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

【讨论】:

  • 如果 Class 也被模板化了怎么办?
  • 我可能已经想通了:template void B::do_something(); godbolt.org/g/IhMwqM
【解决方案2】:

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

template void Class::function<int>(int value);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    相关资源
    最近更新 更多