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,但不确定它是否适用于我。所以我能够存储指向其中任何类型的标准指针(在映射中),然后在构建对象时安全地恢复它们?当我构造对象类型的第一个实例时,这不会在运行时抛出错误吗?我想我可以通过调用工厂方法的每个路径编写单元测试,以便在编译时看到这些错误。