我对c ++中的模板函数有些陌生,遇到了无法通过谷歌搜索找到任何结果的问题。
尝试在此处使用模板来生成不同尺寸的数组。代码如下所示:
template <size_t T>
vector<array<float, T>> poissonSample(size_t T, float r) {
array<float, T> x_min, x_max;
return samples;
}
该函数的定义似乎很好,但是,当我尝试使用类似以下内容的函数来调用该函数时:
poissonSample(4, 0.3f);
编译器将报告“没有函数模板的实例与参数列表匹配。
这是什么问题?
答案 0 :(得分:3)
这是我在onlinegdb.com上编译的代码
#include <vector>
#include <array>
using namespace std;
template <size_t T>
vector<array<float, T>> poissonSample(size_t T, float r);
int main()
{
auto res = poissonSample(4, 1.0f)
return 0;
}
以下是错误消息的全文:
main.cpp:17:46: error: declaration of ‘size_t T’ shadows template parameter
vector<array<float, T>> poissonSample(size_t T, float r);
^
main.cpp:16:11: note: template parameter ‘T’ declared here
template <size_t T>
^~~~~~
main.cpp: In function ‘int main()’:
main.cpp:21:37: error: no matching function for call to ‘poissonSample(int, float)’
auto res = poissonSample(4, 1.0f)
^
main.cpp:17:25: note: candidate: template std::vector > poissonSample(size_t, float)
vector<array<float, T>> poissonSample(size_t T, float r);
^~~~~~~~~~~~~
main.cpp:17:25: note: template argument deduction/substitution failed:
main.cpp:21:37: note: couldn't deduce template parameter ‘T’
auto res = poissonSample(4, 1.0f)
如您所见,根本问题是函数参数中的size_t T
和模板参数中的size_t T
不相关。一个是编译时构造,另一个是运行时构造。
第二个问题是
main.cpp:17:25: note: template argument deduction/substitution failed:
编译器无法计算出您的T。
正确的用法是:
template <size_t T>
vector<array<float, T>> poissonSample(float r);
int main()
{
auto res = poissonSample<4>(1.0f);
return 0;
}
(这只会产生链接器错误,请提供您自己的实现)