【问题标题】:Can I add member variables to a structure, after i have declared it?我可以在声明后将成员变量添加到结构中吗?
【发布时间】:2020-05-09 10:58:09
【问题描述】:

我可以在声明后将成员变量添加到结构中吗? 例如:

struct address 
    { 
       char name[50]; 
       char street[100]; 
    };

我可以动态地(通过代码)向结构中添加另一个成员变量吗?使用类似 address.addMember(pinCode); 如果这样的东西存在!

struct address 
    { 
       char name[50]; 
       char street[100]; 
       int  pinCode;
    };

【问题讨论】:

  • 不,你不能在 C++ 中这样做。你为什么要这样做??
  • 您可以创建一个继承自基本address 结构的新结构,然后包含额外的成员。
  • 没有。如果值得付出努力,您可以创建类似于 VMS 传递描述符的东西来完成这项工作。 itec.suny.edu/scsys/vms/ovmsdoc073/v73/5841/5841pro_052.html
  • 这是一个定义,而不是一个声明。结构声明类似于struct address;

标签: c++ class data-structures struct structure


【解决方案1】:

正如另一个答案中已经提到的那样,您所问的是不可能的。

然而,根据您的需要,解决此问题的一种方法可能是定义另一个继承自您已经定义的类的类,您可以在其中添加其他成员(变量/函数)。

struct address 
{ 
    char name[50]; 
    char street[100]; 
};

struct addressForBurglars : address  
{ 
    int PinCode;
};

【讨论】:

    【解决方案2】:

    嗯,第一件事。对您的核心问题的回答是 C++ 中的“否”。

    但是,撇开技术细节不谈,无论在编程范式中是否可行,请考虑这种需求的需要,您可能会解决数据结构选择的内在问题。在我看来,这需要更多的关注。

    关于设计的一些想法:

    1. 如果您以后需要更多字段,您可以声明所有字段,并为您需要/拥有的字段补充水分,并在相同的地方进行检查。
    2. 如果您需要动态地向数据中添加更多字段,map 是您可能会使用的数据结构。

    【讨论】:

      【解决方案3】:

      你努力实现的目标不可能这么直白,但也不是不可能!

      一种方法是通过继承由新成员扩展address

      struct address 
      { 
         char name[50]; 
         char street[100]; 
      };
      
      struct pin_address : public address 
      { 
         int pinCode;
      };
      

      其他方法是实现某种std::variant - std::map 结构,允许您动态添加/删除成员

      #include <variant>
      #include <map>
      
      using Object = std::variant<int,double,std::string>;
      using Members = std::map<std::string,Object>;
      
      struct address
      {
          Members m_members;
      
          address()
          {
              m_members.emplace("name", Object{});
              m_members.emplace("street", Object{});
              m_members.emplace("pinCode", Object{});
          }
      }
      

      【讨论】:

        【解决方案4】:

        “我可以在声明结构后将成员变量添加到结构中吗?”

        没有。这在 C++ 中是不可能的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-10-25
          • 1970-01-01
          • 2013-07-02
          • 2016-12-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多