C ++ 14 Создание вектора из вариационных шаблонов - PullRequest
0 голосов
/ 17 декабря 2018

Предположим, у меня есть структура

struct A
{
   std::string name;
};

и я хочу написать функцию, которая считывает поле "name" из объектов и возвращает их как std::vector<std::string>.Возможно ли это сделать с помощью шаблонов с переменным числом аргументов (или любым не итерационным методом).Моя цель примерно такая:

template<typename... Ts>
std::vector<std::string> function(Ts... ts)
{
    ...
}

в программе:

    A a1, a2, a3, a4;
    function(a1, a2, a3, a4);

вывод: {a1.name, a2.name, a3.name, a4.name}

1 Ответ

0 голосов
/ 17 декабря 2018

Действительно простое расширение, которое работает в C ++ 11:

template <typename ... Ts>
std::vector<std::string> function(Ts&& ... ts)
{
    return {std::forward<Ts>(ts).name...};
}

(пересылка ссылок не требуется)

В результате получается, что вектор создается с инициализатором список, построенный из пакета параметров переменной , в то время как применяет функцию (оператор доступа к элементу) для каждого элемента переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...