Могу ли я добавить переменные-члены в структуру после того, как я это объявил? - PullRequest
0 голосов
/ 23 января 2020

Могу ли я добавить переменные-члены в структуру после того, как я ее объявил? Например:

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

Могу ли я динамически (через код) добавить еще одну переменную-член в структуру? Используя что-то вроде address.addMember (pinCode); , если что-то подобное существует!

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

Ответы [ 4 ]

5 голосов
/ 23 января 2020

«Могу ли я добавить переменные-члены в структуру после того, как я ее объявил?»

Нет. Это невозможно в C ++.

3 голосов
/ 23 января 2020

То, что вы спрашиваете, невозможно, как уже упоминалось в другом ответе.

Однако, в зависимости от ваших потребностей, одним из способов решения этой проблемы может быть определение другого класса, унаследованного от того, который вы уже определили , в который вы добавляете другие члены (переменные / функции).

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

struct addressForBurglars : address  
{ 
    int PinCode;
};
2 голосов
/ 23 января 2020

Ну обо всем по порядку. Ответ на ваш основной вопрос - «Нет» в C ++.

Но, оставив технические аспекты в стороне, возможно ли это или нет в парадигме программирования, подумайте о необходимости такого требования, и вы можете решить внутреннюю проблему выбора структуры данных. По моему скромному мнению, здесь нужно больше внимания.

Пара мыслей по поводу дизайна:

  1. Если вам понадобятся дополнительные поля в дальнейшем, вы можете объявить, возможно, все из них и гидрировать поля, которые вам нужны / имеют, и имеют проверки на одно и то же.
  2. Если вам нужно динамически добавлять дополнительные поля к вашим данным, карта - это структура данных, которую вы, возможно, будете использовать.
2 голосов
/ 23 января 2020

То, чего вы стремитесь достичь, не возможно так прямо, однако это не невозможно!

Одним из способов было бы расширение 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{});
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...