Предположим, у меня есть такая структура:
struct vector_data
{
double x, y;
double& operator[](size_t index)
{
return * (static_cast<double*>(static_cast<void*>(this)) + index);
}
};
Оператор [] должен работать как положено, потому что vector_data является типом POD.
Ожидаемое поведение - vector_data [0] возвращает x, а vector_data [1] возвращает y.
Теперь предположим, что у меня есть вторая структура:
struct more_data
{
double evil_data;
// There could be more here, data or functions
};
И производные от обоих, как это:
struct composed : public more_data, public vector_data
{
};
Будет ли это разрушать ожидаемое поведение оператора []? Другими словами, будет ли указатель this вектора_data в производной структуре по-прежнему указывать на часть вектора vector_data структуры или он указывает на начало производной структуры?
Если он уничтожает оператор [], то как мне решить эту проблему? Сначала я могу унаследовать от vector_data, но предположим, что составленный содержит виртуальные функции. Я знаю, что большинство компиляторов ставят vtable в конце, но это не гарантируется. Какой будет лучший подход?