Равномерная инициализация по кортежу

Сегодня я пришел к ситуации, когда у меня есть вектор кортежей, где кортежи могут содержать несколько записей. Теперь я хотел преобразовать мой вектор кортежей в вектор объектов так, чтобы записи кортежей точно соответствовали равномерной инициализации моего объекта.

Следующий код делает работу за меня, но это немного неуклюже. Я спрашиваю себя, возможно ли получить общее решение, которое может создать объекты, если кортежи точно соответствуют равномерному порядку инициализации объектов.

Это может быть очень желательной функциональностью, когда число передаваемых параметров растет.

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

struct Object
{
    std::string s;
    int i;
    double d;
};

int main() {
    std::vector<std::tuple<std::string, int, double>> values = { {"A",0,0.},{"B",1,1.} };

    std::vector<Object> objs;
    std::transform(values.begin(), values.end(), std::back_inserter(objs), [](auto v)->Object
        {
        // This might get tedious to type, if the tuple grows
            return { std::get<0>(v), std::get<1>(v), std::get<2>(v) };
           // This is my desired behavior, but I don't know what magic_wrapper might be
            // return magic_wrapper(v);
        });

    return EXIT_SUCCESS;
}
26
задан Aleph0 5 July 2019 в 08:17
поделиться