c++ - 使用 static_cast 转换 POD 对象

标签 c++ casting

这就是我的意思,

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

我可以做这个 Actor

 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 是一件真实的事情。

最佳答案

此转换在任何时候都不起作用。您不能 static_cast 完全不相关且不可转换的类型。

我不确定你想做什么,所以我不知道在这种情况下工作“工作”是什么意思,但在原始内存级别,转换可以通过 reinterpret_cast

V3 vec2 = reinterpret_cast<V3_&>(vec1);

但这是一个不保证有效的丑陋 hack,因为,同样,您的类型是不相关的。如果获得相同程度(甚至更好)的成功,您可以简单地将一个对象 memcpy 转换为另一个对象。

关于c++ - 使用 static_cast 转换 POD 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11401170/

相关文章:

c++ - c++ primer 是否对 `dynamic_cast` 的使用有问题?

java.lang.Integer 无法转换为 java.lang.Long

c# - 为什么我不能从 List<MyClass> 转换为 List<object>?

c++ - 为什么我需要在 C++ 中使用不同的排序格式来对这个 USACO 代码上的数组和优先级队列进行排序?

C++——我们为什么要在类定义之外定义纯虚析构函数?

VB.Net 在并行 ForEach 中使用 XmlNodeList

c - 这个转换在 C 代码中实现了什么

C++:可以为一个 int 分配一个 char* 吗?

c++ - 从动态库生成异步 QProcess,查看输出直到完成

c++ - 我可以用文件初始化 IThumbnailProvider 对象吗?