gpt4 book ai didi

c++ - 使用类型 T 的 std::array 构造类型可从 T 构造的 std::array

转载 作者:搜寻专家 更新时间:2023-10-31 01:28:58 25 4
gpt4 key购买 nike

请考虑这些类型:

struct Part
{
float data;
};

struct Wrap
{
Wrap( const Part& p )
:data( p.data )
{}
float data;
};

现在我想使用 std::array<Part, N>初始化 std::array<Wrap, N> .

int main()
{
std::array<Part, 3> parts{ Part{ 1.0f }, Part{ 2.0f }, Part{ 3.0f } };
std::array<Wrap, 3> wrappers( parts );
return 0;
}

(这会引发错误 "conversion from 'std::array<Part, 3>' to non-scalar type 'std::array<Wrap, 3>' requested")

如何使用 std::array类型 T初始化 std::array可从 T 构建的类型?

最佳答案

您可以使用辅助函数来自动转换:

// Convert each element based on a sequence of indices:
template<typename ToType, typename FromType, std::size_t... Indices>
std::array<ToType, sizeof...(Indices)>
convert_impl(const std::array<FromType, sizeof...(Indices)>& input, std::index_sequence<Indices...>)
{
return {ToType(std::get<Indices>(input))...};
}

// Wraps convert_impl to hide the use of index_sequence from users:
template<typename ToType, typename FromType, std::size_t N>
std::array<ToType, N> convert(const std::array<FromType, N>& input)
{
return convert_impl<ToType>(input, std::make_index_sequence<N>{});
}

int main()
{
std::array<Part, 3> parts {Part{1.0f}, Part{2.0f}, Part{3.0f}};
std::array<Wrap, 3> wraps = convert<Wrap>(parts);

return 0;
}

关于c++ - 使用类型 T 的 std::array 构造类型可从 T 构造的 std::array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50899542/

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