C++ 是否在未提供模板的情况下调用模板化函数?

C++ 是否在未提供模板的情况下调用模板化函数?,c++,templates,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); ... } #包括“除法欧几里得空

我有这个

#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);
  ...
}
#包括“除法欧几里得空间.h”
浮点查找直径精确(常数N,常数D,
const std::vector&v){
d=平方距离(v,偏移量,偏移量+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平方欧氏距离(常数标准::向量和p,大小标准1,
尺寸(结束1,开始2){
...
}
我不应该得到一个错误,说我没有为
平方欧氏距离()提供
t


PS

有趣相关。

不是一件“容易”的事情,但在您的例子中,这很容易:当您传递一个
std::vector
时,编译器将从
std::vector
推断出
T==something

您的函数被实例化为

something squared_Eucl_distance(const std::vector<something> &p, size_t start1,
                                size_t end1, size_t start2)
某个平方距离(常数std::vector&p,size\u t start1,
尺寸(结束1,开始2)
无论什么东西是什么

如果您将std::vector

以外的内容作为第一个参数传递,则会出现错误,但在您的情况下,这很容易:当您传递std::vector时,编译器将从
std::vector
推断出
T==something

您的函数被实例化为

something squared_Eucl_distance(const std::vector<something> &p, size_t start1,
                                size_t end1, size_t start2)
某个平方距离(常数std::vector&p,size\u t start1,
尺寸(结束1,开始2)
无论什么东西是什么


如果您将std::vector

T
以外的东西作为第一个参数传递,您将得到一个错误。“有趣的相关图片。”大多数时候,我担心的是另一种情况;)。。。我猜是胡安科潘扎,但我不确定@πάνταῥεῖ 我也是,但我不想把它写在我的答案里,以免成为“垃圾邮件”;p
T
是从函数参数推导出来的。“有趣的相关图片。”大多数时候我担心的是另一种情况;)。。。我猜是胡安科潘扎,但我不确定@πάνταῥεῖ 我也是,但我不想把它写在我的答案里,以免成为“垃圾邮件”;普贝拉·里斯波斯塔!时间一过,我就接受。Grazie:)//在Lugano住了一段时间哦,我有一个问题,模板类型推断是在编译时还是在运行时发生的?(在类似于发布的情况下)让推断自动进行更好,还是我们更愿意自己给出类型?@g.samares编译时。你应该耙取一个
std::vector const&
并让
T
a
都被推导出来。雅克的评论是正确的。我的示例是因为<代码> A <代码>,未指定,默认为<代码> STD::分配器< /代码>,按照<代码> STD::向量声明> <代码> <代码> C++标题。Bella risposta!时间一过,我就接受。Grazie:)//在Lugano住了一段时间哦,我有一个问题,模板类型推断是在编译时还是在运行时发生的?(在类似于发布的情况下)让推断自动进行更好,还是我们更愿意自己给出类型?@g.samares编译时。你应该耙取一个
std::vector const&
并让
T
a
都被推导出来。雅克的评论是正确的。我的示例之所以工作,是因为<代码> A <代码>,未指定,默认为 STD::分配器< /代码>,按照<代码> STD::vector < /COD>声明在<代码> <代码> C++头中。