C ++ объект должен обновить свой вектор и карту общих указателей на другие объекты - PullRequest
0 голосов
/ 14 мая 2018

У меня есть FooManager класс с открытым членом std::map<size_t, std::shared_ptr<Foo>> fmap; для отслеживания Foo экземпляров. Существует еще farray открытый член FooManager, который является std::vector<std::shared_ptr<Foo>>. Foo экземпляры добавляются как

FooManager fooman;
int total_foos = 100;
for (int i = 0; i < total_foos; ++i) {
    auto ff = std::make_shared<Foo>(foo_data, i);  // calls Foo constructor
    fooman.farray[i] = ff;
    fooman.fmap.emplace(ff->GetID(), ff);  // note that ff.id != index i
}

Каждый Foo экземпляр запускает процесс boost::thread, и я использую FooManager для отслеживания - изначально я нашел этот подход более простым, чем boost::thread::group, но я могу ошибаться.

На барьере, где каждый экземпляр Foo ожидает fooman выполнения вычисления, которое решает, какие экземпляры Foo продолжатся, а какие нет, у меня есть результат foo_continues (std::vector<int>) что соответствует показателям fooman.farray. Если, например, foo_continues[3]=2 и foo_continues[7]=0, мне нужно удалить экземпляр Foo, соответствующий индексу 7, а экземпляр 3 для продолжения с двумя записями , отслеживаемыми в fooman , Важно, чтобы контейнеры fooman.farray и fooman.fmap обновлялись соответственно. Как это можно сделать методом FooManager::CommputeContinues?

И если у вас есть альтернативный подход, кроме как сохранить fooman.farray и fooman.fmap, я открыт для предложений. Заранее спасибо за помощь!

...