這就是我的意思是鑄造POD對象,使用的static_cast
class V3
{
public:
float x,y,z;
};
class V3_
{
public:
float x,y,z;
};
V3_ vec1;
V3 vec2 = static_cast<V3_>(vec1);
我應該怎麼做,使在編譯時該模具的工作?
謝謝。
編輯:
似乎有什麼我想要做一些誤解。 我可以寫一個操作符到轉換,但我希望它在編譯時完成。
這裏是兩個允許static_cast的Vector3實現。我不知道它是如何工作的,但它確實有效。
http://www.ogre3d.org/docs/api/html/OgreVector3_8h_source.html
http://harry-3d-engine.googlecode.com/svn/trunk/NxOgreVec3.h
我能做到這一點投
void DynamicBody::SetLinearMomentum(const Vector3& vel)
{
body->setLinearMomentum(static_cast<NxOgre::Vec3>(vel));
}
我想我如何能做到這一點的解釋。
編輯:
經進一步調查,我發現它實際上是如何做到這一點, 它調用
template<class user_xyz_vector_type>
inline user_xyz_vector_type as() const { ... }
不是一個實際的static_cast,但編譯器接受它作爲一個。 我真的很希望將pod轉換爲彼此是一件實際的事情。
'memcpy'更好,甚至。如果'V3'和'V3_'具有相同的佈局,並且通常對於給定的編譯器來說是相同的,那麼它就可以保證工作,沒有理由將它們放在不同的位置。使用'reinterpret_cast',你可以控制優化器是否利用嚴格的別名規則:你可以很容易地得到在-O1下工作的代碼,並在'-O3'上失敗,這取決於vec1何時何地'被初始化。然後reinterpret_cast – 2012-07-09 18:58:42
。 – mikbal 2012-07-09 19:32:14
@mikbal:'reinterpret_cast'可能很容易因爲Steve Jessop的評論中描述的原因而失敗。 – AnT 2012-07-09 19:54:51