Sto creando una funzione (possibilmente funzione membro, non che importi ... forse lo fa?) Che deve accettare un numero sconosciuto di argomenti, ma voglio che siano tutti dello stesso tipo. So che potrei passare in un array o in un vettore, ma voglio essere in grado di accettare l'elenco di argomenti direttamente senza struttura aggiuntiva o parentesi aggiuntive. Non sembra che le funzioni variadiche siano di per sé dattiloscritte, e non ero sicuro di come andare su queste funzioni di template w/variadic. Ecco in sostanza quello che sto puntando (più che probabile codice non corretto, e totalmente non allo scopo di ottenere liste di draghi, lol):Specificare un tipo per tutti gli argomenti passati alla funzione variadic o alla funzione modello variad/w usando la matrice, il vettore, le strutture, ecc.?
//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
}
O
template<Maiden... Maidens> dragon_list_t make_dragon_list(Maidens...) {
//here be dragons
}
USO
dragon_list_t dragons_to_slay
= make_dragon_list(Maiden.Eunice, Maiden.Helga, Maiden.Aida)
;
Ho provato già alcune cose simili a quelle precedenti, senza dadi. Suggerimenti? Deviazioni evidenti che potrei aver fatto? So che non può essere un affare enorme per fare questo, invece:
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})
;
ma mi piacerebbe molto piuttosto essere in grado di farlo nel primo modo, se possibile.
+1 per dare OP esattamente quello che ha chiesto, anche se è per il meglio o il peggio – Potatoswatter
Non ho giocato con i modelli variadic abbastanza per sapere se la deccapottabile precoce è richiesta, ma +1 la conversione std :: array, non ci ho pensato. –
Hmm, penso che il modello early-reject non sia valido per il caso generale. Se Dragon era una classe base, allora il tuo primo argomento (o tutti i tuoi argomenti), potrebbe essere una classe derivata, e quindi non convertibile l'uno con l'altro. Quando dragon è un enum, potrebbe essere la stessa cosa se la tua prima classe è convertibile in un tipo intero ma non un tipo intero stesso. Penso che fare affidamento sul sovraccarico sia più estendibile. –