reinterpret_cast<CClass*>(raw_ptr)
От: RikkiTikkiTavi Россия  
Дата: 24.08.15 12:28
Оценка:
Здраствуйте!

Хочется немного хулиганства...

В нашем продукте много точек/векторов, прямо на каждом шагу. Т.е. тройки даблов. Могут быть отдельные, могут быть массивы.
Продукт большой, разработчиков много, стандарта жёсткого нет и наличествует несколько форматов передачи данных.
С одной стороны, чаще всего встречается передача через голые указатели. С другой стороны, их надо чуток обработать и, в частности, имеется класс для работы с вектором SuperPooperVector3, который умеет все что нужно. Бинарное представление этого класса простое — 3 дабла и все.

Так вот, хочется писать примерно так:
void Foo(const double vertices[], size_t i)
{
    ...
    Vector3 v2 = AsVector3(vertices+i*3) + Vector3(1,0,0);
    ...
}

Т.е. некоторый участок памяти из 3 даблов считаем как объект класса (с совпадающем представлении в памяти) и используем его методы.
Возможная реализация преобразователя
const Vector3& AsVector3(const double* v)
{
    *reinterpret_cast<const Vector3D*>( v );
}
Vector3& AsVector3(double* v)
{
    *reinterpret_cast<Vector3D*>( v );
}


Понятно, что это некошерно. Понятно, что в общем случае это совсем зло-зло. Но если очень хочется... в отдельных случаях...

Какого будет мнение состоятельных кротов?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.