Re[5]: Ссылки + forward declaration
От: AstroMan  
Дата: 26.09.07 20:02
Оценка:
Здравствуйте, eremeer, Вы писали:

E>пока есть руки, могу написать такое: (тоже теоретически)

E>
E>//sample.h
E>struct P3f;
E>struct P3fForward
E>{
E>  //здесь копия данных P3f
E>};

E>//STATIC_ASSERT(sizeof(P3f) <= sizeof(P3Forward));

E>struct Sample
E>{
E>public:
E>  Sample();

E>private:
E>  P3fForward posForward;
E>  P3f& pos;
E>};

E>//sample.cpp
E>#include "sample.h"
E>#include "p3f.h"

E>Sample::Sample(): pos(reinterpret_cast<P3f&>(posForward))
E>{
E>   pos.SetZero();
E>}
E>//или даже скопировав в P3fForward соответствующий конструктор
E>//Sample::Sample(): posForward(0, 0, 0), pos(reinterpret_cast<P3f&>(posForward))
E>//{
E>//}
E>


Ну здесь уже приведения несвязанных типов. В моем коде все было легально, по крайней мере.
Как я понял проблему, исходный тип P3f из сторонней библиотеки? Если так, то вдвойне плохо.

Нормального решения не знаю. Для сторонних библиотек помогают precompiled headers. Если не менять
заголовки подключаемые в precompiled и не использовать automatic precompiled, то VS у меня не глючит. Решения, базирующиеся на шаблонах, боюсь только замедлит компиляцию.

У меня проект 1 млн. строк компилируется 20 минут. Сокращал время уменьшением связности. Также в библиотеках мелкие классы оставлял как есть, а крупные, сложные и зависимые от сторонних библиотек прятал в pimpl.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.