小编TiM*_*och的帖子

模板成员函数的实例化

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)

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

谢谢,

c++ templates

35
推荐指数
2
解决办法
3万
查看次数

C++模板选择

给出以下代码:

#include <memory>
#include <iostream>

using namespace std;

template<typename T>
void test(T & value) {
  cout << "most generic" << endl;
}

template<typename T>
void test(shared_ptr<T> & value) {
  cout << "shared_ptr" << endl;
}

class A {};

int main(int argc, char ** argv) {
  A a;
  shared_ptr<A> p(new A());
  test(a);
  test(p);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么打电话

test(p)
Run Code Online (Sandbox Code Playgroud)

使用T = A实例化第二种形式的测试,而不是抱怨它无法区分这两个签名?

c++ templates c++11

11
推荐指数
1
解决办法
1049
查看次数

标签 统计

c++ ×2

templates ×2

c++11 ×1