gpt4 book ai didi

c++ - 如何将 std::array 转换为一个点?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:19:50 27 4
gpt4 key购买 nike

我想构建一个模板函数来将 std::array 转换为一个通用点,该点具有一个接受其坐标参数的构造函数。

template<typename PointT, size_t N>
PointT to(std::array<double, N> const& a)
{
return PointT(a[0], a[1], ...); // How to expand a?
}

我的问题是:有没有办法扩展数组a

最佳答案

template <typename PointT, std::size_t N, std::size_t... Is>
PointT to(std::array<double, N> const& a, std::index_sequence<Is...>)
{
return PointT(a[Is]...);
}

template <typename PointT, std::size_t N>
PointT to(std::array<double, N> const& a)
{
return to<PointT>(a, std::make_index_sequence<N>{});
}

DEMO


注意:index_sequence/integer_sequence 实用程序从 C++14 开始可用。由于问题被标记为 C++11,此答案中的演示代码利用了以下实现:

namespace std
{
template <std::size_t... Is>
struct index_sequence {};

template <std::size_t N, std::size_t... Is>
struct make_index_sequence_h : make_index_sequence_h<N - 1, N - 1, Is...> {};

template <std::size_t... Is>
struct make_index_sequence_h<0, Is...>
{
using type = index_sequence<Is...>;
};

template <std::size_t N>
using make_index_sequence = typename make_index_sequence_h<N>::type;
}

关于c++ - 如何将 std::array 转换为一个点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26442512/

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