Здравствуйте, 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.