Попытка получить доступ к членам класса через карту указателей - PullRequest
0 голосов
/ 09 октября 2019

У меня есть следующий код:

class Thing
{
    private:
    Item item;
};

class Mgr{

   public:

   std::map<int, Item*> sps;

};



void Thing::addItemToMap(std::map<int, Item*>& sps, int i){

   sps.insert(std::make_pair(i, &(this->item)));
}


void Mgr::accessItem( int i){
    auto it = sps.find(i);
    if(it!=sps.end(){
      // it->second             is the instance of Item I inserted in the map before?
   }
}

У Mgr будет возможность получить тот же экземпляр элемента Thing->, который вставила Thing, вызывая "addItemToMap" с ключом "i = 3")метод "accessItem (3)"?

1 Ответ

0 голосов
/ 10 октября 2019

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

class Item final {
public:
    // Some data
    int data{ 0 };
};

using ItemsMap = std::map<int, std::shared_ptr<Item>>;

class Thing final {
public:
    void addItemToMap(int i, ItemsMap& items)
    {
        items.insert(std::make_pair(i, _item));
    }

private:
    std::shared_ptr<Item> _item;
};

class Mgr final {
public:
    void accessItem(int key)
    {
        ItemsMap::const_iterator foundIt = sps.find(key);
        if (foundIt != sps.end()) {
            std::cout << foundIt->second->data << std::endl;
        }
    }

private:
    ItemsMap sps;
}; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...