gpt4 book ai didi

c++ - 如何获取 C++20 std::ranges 范围内值的类型?

转载 作者:行者123 更新时间:2023-12-02 01:26:32 25 4
gpt4 key购买 nike

给定 C++20 中的 std::ranges::range,我如何确定该范围内值的类型?

我想编写一个函数,使 std::vector 超出任意范围。我希望这个函数有一个漂亮、明确的声明。像这样的东西:

template<std::ranges::range Range>
std::vector<std::value_type_t<Range>> make_vector(Range const&);

以下似乎有效,但声明不明确且实现很丑陋(甚至忽略它没有在可能的情况下预先分配正确的大小)。

  template<std::ranges::range Range>
auto make_vector(Range const& range)
{
using IteratorType = decltype(std::ranges::begin(std::declval<Range&>()));
using DerefType = decltype(*std::declval<IteratorType>());
using T = std::remove_cvref_t<DerefType>;
std::vector<T> retval;
for (auto const& x: range) {
retval.push_back(x);
}
return retval;
}

是否有规范/更好/更短/更好的方法来做到这一点?

最佳答案

您要查找的类型特征拼写为 std::ranges::range_value_t ,而不是 std::value_type_t

此外,您在这里尝试编写的整个函数只是 std::ranges::to 的一个更有限的版本。即将在 C++23 中出现。

关于c++ - 如何获取 C++20 std::ranges 范围内值的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74496713/

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