[C++] Klammern eingeschlossener Initialisiererlistenkonstruktor


Answers

In C ++ 0x scheint es, dass Sie einen Konstruktor dafür erstellen können. Ich habe selbst keine Erfahrung damit, aber es sieht so aus, als würde es Initialisierungslisten-Konstruktor genannt .

Ein Container könnte einen Initialisierungslisten-Konstruktor wie folgt implementieren:

template<class E> class vector {
public:
    vector (std::initializer_list<E> s) // initializer-list constructor
    {
        reserve(s.size());  // get the right amount of space
        uninitialized_copy(s.begin(), s.end(), elem);   // initialize elements (in elem[0:s.size()))
        sz = s.size();  // set vector size
    }

    // ... as before ...
};
Question

Ich habe Klasse Phänotyp mit folgendem Konstruktor:

Phenotype(uint8 init[NUM_ITEMS]);

Ich kann einen Phänotyp wie folgt erstellen:

uint8 data[] = {0,0,0,0,0};
Phenotype p(data);

Aber ich bekomme einen Fehler, wenn ich versuche, einen wie folgt zu erstellen:

Phenotype p = {0,0,0,0,0};

Ausgabe:

$ make
g++ -Wall -g main.cpp -std=c++0x
main.cpp: In function int main(int, char**)’:
main.cpp:109: error: no matching function for call to Phenotype::Phenotype(<brace-enclosed initializer list>)’
main.cpp:37: note: candidates are: Phenotype::Phenotype(uint8*)

Der Fehler scheint anzuzeigen, dass es einen Weg gibt, einen Konstruktor zu definieren, der eine in Klammern eingeschlossene Initialisierungsliste verwendet. Weiß jemand, wie das gemacht werden könnte?