假设我有两个不同名称但结构完全相同的类。有没有办法将一个类的对象转换为另一个类的对象?
这可能听起来很愚蠢,但我有理由这样做。我的应用程序的体系结构提供了抽象类component
和storage
就绪应用程序将包含从component
派生的几个专用组件,并且每个组件都将定义自己的存储类型,派生自{{ 1}}。在应用程序初始化期间,对于每个组件,将创建其自定义存储类型的存储对象,并将其作为指向组件的指针传递。
这样,所有组件都保持完全独立,这对于可重用性和测试非常有用。但是,当然,需要在组件之间交换信息。为了实现这一点,我想让两个组件获得一个指向同一存储的存储指针。约束指针必须是特定于组件的存储类型。
框架代码(抽象类)
storage
示例组件
class Storage {};
class Component {
public:
void SetStorage(Storage* storage);
private:
Storage* storage;
};
另一个组件
class PhysicsStorage : public Storage;
class PhysicsComponent : public Component;
主要申请
class CollisionStorage : public Storage; // same structure as PhysicsStorage as both components need the same data like world coordinates and rotations of all forms in the 3d space
class CollisionComponent : public Component;
所以我想知道是否有一种方法可以将#include "system.h"
PhysicsStorage Worlddata;
PhysicsComponent Physics;
CollisionComponent Collision;
Physics.SetStorage(&Worlddata);
Collision.SetStorage(&Worlddata); // this points to a PhysicsStorage but that is actually the same like a CollisionStorage which is expected
的指针投射到PhysicsStorage*
。在这种情况下,两者都在其相关组件类的文件中定义。两者都来自抽象CollisionStorage*
。
我只想在两个自定义存储类型具有完全相同的结构的情况下这样做。否则就会毫无意义。我对进度指针的使用不太熟悉,所以我想知道是否有办法做到这一点。我所知道的是你可以投射到基类,但这不是我想要的。对两个组件使用共享存储类型会破坏独立性。非常感谢!
答案 0 :(得分:2)
这可能有用,也可能没有。我相信这是一个未定义的行为,我会避免在生产代码中这样做。
相反,请考虑将公共字段和方法推送到新类中,并使ComponentOneStorage
和ComponentTwoStorage
继承该类。然后,您可以传递指向基类的指针/引用,这样您就可以访问公共数据,而无需在不兼容的指针类型之间进行转换。