Использование std::apply для кортежа в шаблонной функции

Я пытаюсь запрограммировать класс контейнера данных, который содержит данные в нескольких векторах. По задумке, у него есть только один вектор каждого типа, один для целых чисел, один для чисел типа double и так далее.

Я хотел бы "загрузить" данные в эти векторы, используя кортеж, который может иметь 1, 2 или более векторов в любом порядке, но у меня возникают проблемы с разворачиванием данных кортежа с помощью std::apply.

Если кто-нибудь может помочь мне исправить этот код, я буду полностью благодарен. Кроме того, если кто-нибудь сможет предложить лучшее решение, соответствующее стандарту C++17 или ниже, он будет приветствоваться.

#include <vector>
#include <string>
#include <tuple>

class Vectors
{
public:
    template<typename Tuple>
    void operator= (Tuple tuple)
    {
        std::apply([this](auto&... args) { ((this = args), ...); }, tuple);
    }   
   
private:
    std::vector<int> ints;
    std::vector<double> doubles;
    std::vector<std::string> strings;

    template<typename T> void operator= (const std::vector<T>& container);
    template<> void operator= (const std::vector<int>& container)         { ints = container; }
    template<> void operator= (const std::vector<double>& container)      { doubles = container; }
    template<> void operator= (const std::vector<std::string>& container) { strings = container; }
};

int main()
{
    std::vector<int> ints { 1, 2, 3, 4 };
    std::vector<double> doubles  { 5.5, 7.7, 9.9 };;
    std::vector<std::string> strings = { "abcd", "efgh" };
   
    Vectors data;
    data = std::make_tuple(ints);
    data = std::make_tuple(ints, doubles);
    data = std::make_tuple(strings, doubles, ints);
    data = std::make_tuple(doubles, ints, strings);
   
    return 0;
}

Большое спасибо.

0 ответов

Другие вопросы по тегам