C++ 在C+之间分发共享数据+;物体
我试图构建一组可以共享数据但彼此不耦合的对象。我想要的是每个对象的字段都是一个C++ 在C+之间分发共享数据+;物体,c++,constructor,shared-ptr,C++,Constructor,Shared Ptr,我试图构建一组可以共享数据但彼此不耦合的对象。我想要的是每个对象的字段都是一个共享的\u ptr到它们需要的任何数据。一旦创建了所有对象,这将满足我的所有需求,但我的问题是如何分发创建共享的\u ptr所需的信息,因为类型可以是任何类型 我将创建在factory对象中同时共享一组数据的所有对象。此外,每个共享字段将有一个枚举条目来表示属性类型(而不是数据类型)。例如,枚举将有一个名为Position的条目,每个需要位置信息的对象都将使用enum键入地图,以找到创建共享\u ptr所需的信息 我想
共享的\u ptr
到它们需要的任何数据。一旦创建了所有对象,这将满足我的所有需求,但我的问题是如何分发创建共享的\u ptr
所需的信息,因为类型可以是任何类型
我将创建在factory对象中同时共享一组数据的所有对象。此外,每个共享字段将有一个枚举条目来表示属性类型(而不是数据类型)。例如,枚举将有一个名为Position
的条目,每个需要位置信息的对象都将使用enum键入地图,以找到创建共享\u ptr
所需的信息
我想从我的系统中得到的是:
SetEnum
传递给工厂,该工厂定义要创建的对象的“集合”,以及定义对象集合初始数据的可选map
映射
在每个对象中创建共享的\u ptr
作为字段。如果对象需要一个与特定值attributenum
对应的字段,它将从映射中提取其值。如果该值不是地图中的关键点,它将使用默认值创建该值,并将其添加到地图中以供将来的对象使用。如果模板类型的方法有助于解决问题,则可以在构造期间或之后执行此步骤attributenum
映射到类型?例如,与Position
的attributenum
值相对应的每个字段都将具有类型shared\u ptr
,但如果我尝试将Position
与例如shared\u ptr
关联,则需要编译错误。我的问题是怎么做
我想到了两种不同的系统(尽管它们都不能保证编译时的错误):
std::map
并将共享的ptr
静态转换为适当的类型我正在考虑存储两组并行数据,
attributenum
具有条目Position
,以及定义类型的编译器常量,例如#define Position double
,然后我只需在必须使用的地方对类型使用Position
,但是这会使代码更难阅读。您想要在运行时定义其字段的对象吗?你确定这是你试图解决的问题的最佳设计吗?你将如何使用它们?听起来像是指针在旋转。在开始发明你自己的产品之前,阅读有关和/或的文档solution@Beta不完全是(我不认为)。我将有许多不相关的对象,其中包含一个字段位置
,该字段将是共享的\u ptr
,所有这些都是独立定义的。我想要的是一种方法来确保编译时每个类中的类型
都是相同的,对于每个描述为Position
@zaufi的字段,我以前遇到过boost::any,但不确定它是否适用于我。所以我能够存储指向其中任何类型的标准指针(在映射中),然后在构建对象时安全地恢复它们?当我构造对象类型的第一个实例时,这不会在运行时抛出错误吗?我想我可以通过调用工厂方法的每个路径编写单元测试,以便在编译时看到这些错误。