c++ - 使用数组构造函数的模板作为函数返回类型
问题描述
我对 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);
编译器将报告“没有函数模板的实例与参数列表匹配。
这里有什么问题?
解决方案
这是我在 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;
}
(这只给出一个链接器错误,提供你自己的实现)
推荐阅读
- java - Java FX:检测到 [iscc.exe] 版本 0,但需要版本 5。由于配置问题,Bundler EXE 安装程序被跳过
- r - 同时绘制模型的训练数据集和预测区域
- javascript - JQuery:如何选择输入祖先的标签
- elasticsearch - 弹性:查询嵌套文档的过滤子集的总和
- react-native - 反应本机反应导航抽屉未打开
- django - 如何在 django 模板中设置图像路径
- ionic-framework - 如何在启动时加载所有页面?
- unity3d - Firebase 数据库检索用户的高分排名
- python - 如何在 Python 中更新字典中键字段的值?
- python - 在 Keras Sequential 模型中,Conv2D 似乎要求内核比前一层厚。为什么?