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
以外的东西作为第一个参数传递,您将得到一个错误。“有趣的相关图片。”大多数时候,我担心的是另一种情况;)。。。我猜是胡安科潘扎,但我不确定@πάνταῥεῖ 我也是,但我不想把它写在我的答案里,以免成为“垃圾邮件”;pT
是从函数参数推导出来的。“有趣的相关图片。”大多数时候我担心的是另一种情况;)。。。我猜是胡安科潘扎,但我不确定@πάνταῥεῖ 我也是,但我不想把它写在我的答案里,以免成为“垃圾邮件”;普贝拉·里斯波斯塔!时间一过,我就接受。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 <代码>,未指定,默认为