Указание одного типа для всех аргументов, передаваемых в вариативную функцию или вариативную функцию шаблона без использования массив, вектор, структуры и т. д.?

Я создаю функцию (возможно, функцию-член, но это не имеет значения ... может быть, это так?), Которая должна принимать неизвестное количество аргументов, но я хочу, чтобы все они были того же типа. Я знаю, что могу передать массив или вектор, но я хочу иметь возможность принимать список аргументов напрямую без дополнительной структуры или даже дополнительных скобок. Не похоже, что вариативные функции сами по себе являются типизированными, и я не был уверен, что делать с этими вариативными шаблонными функциями. Вот, по сути, то, к чему я стремлюсь (скорее всего, это неправильный код, и совершенно не для целей получения списков драконов, смеется):

//typedef for dragon_list_t up here somewhere.

enum Maiden {
    Eunice
    , Beatrice
    , Una_Brow
    , Helga
    , Aida
};

dragon_list_t make_dragon_list(Maiden...) {
    //here be dragons
}

ИЛИ

template<Maiden... Maidens> dragon_list_t make_dragon_list(Maidens...) {
    //here be dragons
}

ИСПОЛЬЗОВАНИЕ

dragon_list_t dragons_to_slay
    = make_dragon_list(Maiden.Eunice, Maiden.Helga, Maiden.Aida)
;

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

dragon_list_t make_dragon_list(std::array<Maiden> maidens) {
    //here be dragons.
}
dragon_list_t dragons_to_slay
    = make_dragon_list({Maiden.Eunice, Maiden.Helga, Maiden.Aida})
;

, но я бы предпочел сделать это первым способом, если это возможно.

40
задан Johannes Schaub - litb 2 October 2011 в 10:30
поделиться