schreiben tuple_assign
Funktion:
template <class T>
using uncvref = std::remove_cv_t<std::remove_reference_t<T>>;
template <class T, class U, std::size_t...Is>
void tuple_assign_(T& to, U&& from, std::index_sequence<Is...>) {
std::initializer_list<int>{
(std::get<Is>(to) = std::get<Is>(std::forward<U>(from)), 0)...
};
}
template <class T, class U,
std::size_t TSize = std::tuple_size<uncvref<T>>::value,
std::enable_if_t<TSize == std::tuple_size<uncvref<U>>::value, int*> = nullptr>
T& tuple_assign(T& to, U&& from) {
tuple_assign_(to, std::forward<U>(from), std::make_index_sequence<TSize>{});
return to;
}
und wickeln die Vektoren mit forward_as_tuple
(DEMO):
tuple_assign(a, std::forward_as_tuple(std::move(v0), std::move(v1), std::move(v2)));
Haben Sie versucht, 'a = array, 3> ({v0, v1, v2}) '? –
'a = {v0, v1, v2}' funktioniert tatsächlich. – Rakete1111
@ Rakete1111 überprüft 'a = {move (v0), move (v1), move (v2)};'. Es klappt. Jeder kann es erklären? – user1899020