【发布时间】:2019-12-19 06:43:51
【问题描述】:
我想从 std::vector 中的元素创建一个 std::tuple 并从我的函数中返回它。 std::vector 的大小并不总是三,所以我需要一个函数,可以从三个、四个和更多元素创建 std::tuple 并返回它。
#include <iostream>
#include <tuple>
#include <vector>
template<typename... Args>
std::tuple<Args...> create_tuple(const std::vector<int>& vec) {
if (vec.size() == 2)
return std::make_tuple(vec[0], vec[1]);
else if (vec.size() == 3)
return std::make_tuple(vec[0], vec[1], vec[2]);
}
int main() {
std::vector<int> vec{ 0, 1, 2 };
auto t = create_tuple(vec);
}
目前存在编译错误,我该如何解决?我使用的是 C++11,我不能使用 'auto' 作为从函数返回的值类型。
【问题讨论】:
-
你为什么想要一个所有相同类型的元组?这就是
std::vector或std::array的用途。 -
你完全误解了模板,忘记了 C++ 的静态类型范式。
-
你认为你为什么需要这个?也许可以做到(毕竟什么都可以),但是一旦你拥有它,你就会意识到你最终得到了与
std::vector已经提供的完全相同的东西。闻起来像 xy problem -
1/ 你不能按照说明进行这项工作,因为
create_tuple的返回类型在编译时是不可知的。 2/ 如果遇到错误,一般应将其包含在问题中。
标签: c++ c++11 templates variadic-templates stdtuple