Initialize array im Konstruktor übergeben, ohne mit dem default-Konstruktor oder Abtretung

Betrachten:

struct A {

 A (int);

 A (const A &);
};

struct B {

 A foo [2];

 B (const A & x, const A & y)
 : foo {x, y} /* HERE IS THE PROBLEM */
 {}
};

Ich war davon ausgegangen, dass Arbeit da bin ich mit C++0x support in GCC4.3, die angeblich unterstützt initialiser Listen. Keine Freude.

Ich habe eine Klasse A, die hat keinen default-Konstruktor. Dies ist nicht verhandelbar. Zuordnung post-Standard ist keine option.

Ich versuche zu erstellen, B, die verwendet A. B::foo kann nicht std::vector.

Wie kann ich Sie initialisieren B::foo im B(...), die Konstruktion Ihrer Elemente genau einmal?

Im moment bin ich condidering ersetzen von B mit

struct B {

A foo_a;

B foo_b;

A * foo () {
assert ((&foo_b) - *&foo_a) == 1);
return &foo_a;
}

B (const A & x, const A & y) : foo_a(x), foo_b(y) {}
};

Oder sogar mit char foo [2*sizeof(A)] mit placement-new -- IGITT!

Sicherlich gibt es eine richtige Art und Weise, dies zu tun?

Nur lassen Sie wissen, dass ich formatiert Ihren code-Blöcke ein bisschen mehr schön mit der "0101" - Taste.

InformationsquelleAutor spraff | 2010-09-26

Schreibe einen Kommentar