簡體   English   中英

如何將值的元組中的對應值附加到相同類型的向量的元組中?

[英]How to append the corresponding value from a tuple of values to a tuple of vectors of the same types?

我有一個數組類的結構

template <typename... Ts>
class soa {
    std::tuple<std::vector<Ts>...> vectors;
    void push_back(std::tuple<Ts...> values);
}

我希望push_back將值的元組推到每種類型的每個對應向量上。 我當時正在考慮使用index_sequences做些事情,但我不太確定如何正確進行包擴展。

這就是我的想法,但是擴展無法正常工作。 我應該如何正確進行擴展?

template <typename... Ts>
class soa {
    std::tuple<std::vector<Ts>...> vectors;

    template <std::size_t... Is>
    void push_back_impl(std::tuple<Ts...> values, std::index_sequence<Is...>) {
        // Some kind of pack expansion here
        // This doesn't work, but is kinda what I want
        //std::get<Is>(vectors).push_back(std::get<Is>(values))...;
    }

    void push_back(std::tuple<Ts...> values) {
        push_back_impl(values, std::index_sequence_for<Ts...>{});
    }
};

如果我使用的index_sequence錯誤,也請糾正我。 元編程讓我有點頭暈。

在C ++ 17之前的版本中,您可以使用eater

template<class... Ts> void eater(Ts... ts) {}

然后該函數可以是:

template <std::size_t... Is>
void push_back_impl(std::tuple<Ts...> values, std::index_sequence<Is...>) {
    eater((std::get<Is>(vectors).push_back(std::get<Is>(values)), 0)...);
}

在C ++ 17中,只需使用逗號運算符:

template <std::size_t... Is>
void push_back_impl(std::tuple<Ts...> values, std::index_sequence<Is...>) {
    (std::get<Is>(vectors).push_back(std::get<Is>(values)),...);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM