Здравствуйте, enji, Вы писали:
E>E>struct Data {};
E>struct Base
E>{
E> int sz;
E> Data d[1];
E>};
E>struct Der11
E>{
E> Base b;
E> Data d[10];
E>};
E>
E>Можно ли по стандарту так делать? А если Data будет POD? Должна ли Base быть POD? A Der11? А если в Base будет еще какой-нить double — не будет ли проблем с выравниванием?
О боже, какие страшные хаки. Вот только недавно встретил в WINAPI такое же, полчаса думал что это и как они до такого додумались. Вот откуда оказывается ноги то расли
Если вам хочется задавать кол-во элементов в зависимости от класса наследника, вот вам несколько путей:
Динамический:
struct Base
{
std::vector<Data> d;
};
void func()
{
Der10 d;
d.d.resize(10);
doSomething(&d.b);
}
Статический:
template<int N>
struct Base
{
Data d[N];
};
struct Der10 : public Base<10>
{};
template<int N>
void doSomething(Base<N> *b)
{
for (int i = 0; i < N; ++i)
{
std::cout << b->d[i].a << b->d[i].s << '\n'; /// *************
}
}
void func()
{
Der10 d;
doSomething(&d.b);
}