Рассмотрим:
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 */
{}
};
Я ожидал, что это сработает, поскольку я использую поддержку C ++ 0x в GCC4.3, который якобы поддерживает списки инициализаторов.Никакой радости.
У меня есть класс А, у которого нет конструктора по умолчанию.Это не подлежит обсуждению.Назначение после завершения по умолчанию не вариант.
Я пытаюсь создать B, который использует A. B :: foo не может быть std :: vector.
Как я могу инициализировать B::foo
в B(...)
, создание его элементов ровно один раз?
В данный момент я готов заменить B на
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) {}
};
Или даже использовать char foo [2*sizeof(A)]
с размещением нового - YUK!
Конечно, есть правильный способ сделать это?