Использование 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;
}
Большое спасибо.