Initialiser dans le constructeur, sans l'aide de constructeur par défaut ou de la cession

Considérer:

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 */
 {}
};

Je m'attendais à ce genre de travail depuis que je suis à l'aide de C++0x soutien dans GCC4.3, qui aurait soutient initialiser les listes. Pas de joie.

J'ai une classe A qui n'a pas de constructeur par défaut. Ce n'est pas négociable. Affectation post-défaut n'est pas une option.

Je suis en train de créer B, qui utilise A. B::foo peut pas être std::vector.

Comment puis-je initialiser B::foo dans B(...), la construction de ses éléments exactement une fois?

En ce moment, je suis condidering remplaçant B avec

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) {}
};

Ou même en utilisant char foo [2*sizeof(A)] avec la mise en place de la nouvelle -- BEURK!

Il y a certainement une bonne façon de le faire?

Juste pour vous informer que j'ai formaté votre blocs de code un peu plus de bien à l'aide de la "0101" bouton.

OriginalL'auteur spraff | 2010-09-26