没有提供模板的模板化函数?

时间:2014-12-13 17:13:15

标签: c++ templates

我有这个

#include "Division_Euclidean_space.h"

float find_diameter_exact(const int N, const int D,
                              const std::vector<float>& v) {
  d = squared_Eucl_distance(v, offset, offset + D, i * D + D);
  ...
}

我实际上计划制作模板化方法,因为我的矢量将支持任何数值数据类型。

所以,在包含的头文件中我有:

template<typename T>
T squared_Eucl_distance(const std::vector<T> &p, size_t start1,
                                size_t end1, size_t start2) {
   ...
}

我不应该收到错误消息,说我没有为T提供squared_Eucl_distance()


PS

有趣的相关pic

1 个答案:

答案 0 :(得分:4)

Template type deduction不是&#34;容易&#34;事情,但在你的情况下很简单:当你传递std::vector<something>时,编译器将从std::vector<T>推断出T === something

您的功能实例化为

something squared_Eucl_distance(const std::vector<something> &p, size_t start1,
                                size_t end1, size_t start2)

无论something是什么。

如果您将第一个参数作为std::vector

以外的其他参数传递,则会出现错误