У меня есть 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
, я открыт для предложений. Заранее спасибо за помощь!