是否可以将std::array<float, 4>
转换为std::array<double, 4>
?
例如:
答案 0 :(得分:2)
不,你不能把一个扔到另一个。它们是两种不相关的类型。您需要遍历源数组并在目标数组中设置每个相应的元素。
std::array<float, 4> float_array{ 0.0f, 10.0f, 20.0f, 30.0f };
std::array<double, 4> double_array;
for (std::size_t i = 0; i < float_array.size(); ++i)
double_array[i] = float_array[i]
答案 1 :(得分:2)
你可以为它创建一个函数: live sample
template<typename Dest, typename Src, std::size_t N, std::size_t... Is>
auto convert_array_to_impl(const std::array<Src, N> &src, std::index_sequence<Is...>) {
return std::array<Dest, N>{{static_cast<Dest>(src[Is])...}};
}
template<typename Dest, typename Src, std::size_t N>
auto convert_array_to(const std::array<Src, N> &src) {
return convert_array_to_impl<Dest>(src, std::make_index_sequence<N>());
}
...
auto double_array = convert_array_to<double>(float_array);
此函数实现相对于循环的优点是,当目标类型不是默认构造时,它将起作用。如果情况永远不会出现这种情况,那么另一个答案中的循环就会更直接。
答案 2 :(得分:0)
类型不一样,因此您不能仅将一种类型转换为另一种类型。
您可以使用std::copy
算法函数代替循环。
#include <algorithm>
//..
std::array<float, 4> f4;
std::array<double, 4> d4;
//.. float to double
std::copy(f4.begin(), f4.end(), d4.begin());
// double to float
std::copy(d4.begin(), d4.end(), f4.begin());