Il migliore cosa sarebbe quella di utilizzare un lista di inizializzazione
#include <initializer_list>
#include <vector>
class GenericNode {
public:
GenericNode(std::initializer_list<GenericNode*> inputs)
:inputs_(inputs) {} //well that's easy
private:
std::vector<GenericNode*> inputs_;
};
int main() {
GenericNode* ptr;
GenericNode node{ptr, ptr, ptr, ptr};
} //compilation at http://stacked-crooked.com/view?id=88ebac6a4490915fc4bc608765ba2b6c
il più vicino a ciò che già avete, utilizzando C++ 11 è quello di utilizzare initializer_list del vettore:
012.351.641,061 mila
template<class ...Ts>
GenericNode(Ts... inputs)
:inputs_{inputs...} {} //well that's easy too
//compilation at http://stacked-crooked.com/view?id=2f7514b33401c51d33677bbff358f8ae
E qui c'è una versione C++ 11 senza inizializzazioni_lista. È brutto e complicato e richiede funzionalità mancanti in molti compilatori. Utilizzare la lista di inizializzazione
template<class T>
using Alias = T;
class GenericNode {
public:
template<class ...Ts>
GenericNode(Ts... inputs) { //SFINAE might be appropriate
using ptr = GenericNode*;
Alias<char[]>{(//first part of magic unpacker
inputs_.push_back(ptr(inputs))
,'0')...,'0'}; //second part of magic unpacker
}
private:
std::vector<GenericNode*> inputs_;
};
int main() {
GenericNode* ptr;
GenericNode node(ptr, ptr, ptr, ptr);
} //compilation at http://stacked-crooked.com/view?id=57c533692166fb222adf5f837891e1f9
//thanks to R. Martinho Fernandes for helping me get it to compile
Estranei a tutto ciò, non so se queste sono proprietarie di puntatori o meno. Se lo sono, utilizzare invece std::unique_ptr
.
fonte
2012-12-20 20:11:33
C'è qualche sintassi non valida nell'esempio. Cosa stai specificatamente cercando di chiedere? –
usa 'std :: initializer_list'. –
Siamo spiacenti. Per chiarire, come posso usare la lista degli argomenti per compilare un vettore std ::? @MooingDuck, guarderò in std :: initializer_list. Grazie. – fredbaba