C++从元组<向量获取值<Ts>...>



我有一个类Storage,其中有向量元组。我希望能够从中获取值。我应该如何实现getRow((?

所有向量的长度总是完全相同。

template<class ... Ts>
class Storage
{
std::tuple<std::vector<Ts>...> m_col;
public:
auto getRow(int row) {
// get row-th element from each vector, put it together and return them as tuple
}
template<size_t I>
auto getElement(int row) {
return get<I>(m_col)[row];
}
};

您还可以使用std::apply(C++17(,它比index_sequences:更简单

auto getRow(std::size_t row)
{
return std::apply([&](const auto&... columns) {
return std::tuple<Ts...>{columns[row]...};
}, m_col);
}

一种可能的实现:

public:
std::tuple<Ts...> get_row(std::size_t row) const {        
return get_row_impl(row, std::index_sequence_for<Ts...>{});
}
private:
template<std::size_t... is>
std::tuple<Ts...> get_row_impl(std::size_t row, std::index_sequence<is...>) const {
assert(((row < std::get<is>(m_col).size()) && ...));
return std::tuple<Ts...>(std::get<is>(m_col)[row]...);
}

std::apply和可变λ的替代实现:

public:
std::tuple<Ts...> get_row(std::size_t row) {        
return std::apply([row](const auto&... vs) {
return std::tuple<Ts...>{vs[row]...};
}, m_col);
}

最新更新