gpt4 book ai didi

c++ - 将可变迭代器参数转换为值类型的元组

转载 作者:行者123 更新时间:2023-11-30 01:47:44 25 4
gpt4 key购买 nike

如何将 IteratorTypes 的模板参数包转换为相应 value_type 的元组?我尝试了以下,但失败了

error: wrong number of template arguments (2, should be 1)
using ValueTypes = typename std::iterator_traits<IteratorTypes...>::value_type;
^

#include <type_traits>
#include <vector>
#include <tuple>

template <typename ... IteratorTypes>
void foo(IteratorTypes&&...its)
{
using ValueTypes = typename std::iterator_traits<IteratorTypes...>::value_type;
static_assert(std::is_same<std::tuple<ValueTypes>,std::tuple<int,float>>::value, "types do no match");
}

int main() {
std::vector<int> int_vec(1);
std::vector<float> float_vec(1);

foo(int_vec.begin(), float_vec.begin());
return 0;
}

Live on coliru

最佳答案

... 紧跟在您要扩展的模式之后。

using ValueTypes = std::tuple<typename std::iterator_traits<IteratorTypes>::value_type...>;
static_assert(std::is_same<ValueTypes, std::tuple<int,float>>::value, "types do no match");

此外,在将其传递给 iterator_traits 之前,您可能应该 std::decay IteratorTypes,或者按值而不是转发引用获取它们.

关于c++ - 将可变迭代器参数转换为值类型的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31225618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com