Итак, я создаю симулятор, чтобы имитировать некоторые алгоритмы балансировки нагрузки. Я создал 2 векторов сердечников и диспетчеров, как показано ниже:Как хранить внутри очереди уникальный_ptr объекта, который находится внутри вектора
std::vector<std::unique_ptr<Dispatcher> > vDisp;
std::vector<std::unique_ptr<Core> > vCore;
Класса грузоотправителя имеет очередь для сердечников, чтобы назначить для них рабочих мест.
std::queue<Core> disp_core_queue;
Плюс у меня есть некоторые функции для того, чтобы справиться с этой очередью:
void add_core_q(Core& p){ disp_core_queue.push(p); }
Core get_core_q(){ return disp_core_queue.front(); }
Когда программа инициализирует я заселить ядра и disps так:
for (auto i=0; i<dispNumb; ++i)
{
vDisp.push_back(std::unique_ptr<Dispatcher> (new Dispatcher));
std::cout<<"Disp n."<<i<<" Created"<<std::endl;
}
Моя проблема заключается в том, что Я не могу получить Core из вектора и хранить его в очереди диспетчера. Я пробовал много способов, но кажется, что C++ наказывает меня по разным причинам. Моя последняя попытка была это одна из внутри Диспетчера:
int kore = random_core();
this->add_core_q(vCore.at(kore));
Который дал эту ошибку во время компиляции:
ошибка: нет подходящей функции для вызова «Dispatcher :: add_core_q (_gnu_cxx :: __ alloc_traits> > :: value_type &) '
кандидат:
недействительным грузоотправитель :: объявления d_core_q (основной &)
не известно преобразование для аргумента 1 из '__gnu_cxx :: __ alloc_traits>> :: value_type {ака станд :: unique_ptr}' на 'Ядра &'
Если кто-нибудь может дать я намекнул, что буду очень благодарен. Заранее спасибо.
Я попробовал ваш подход, но GCC не согласится. Во время компиляции выдается ошибка на * stl_deque.h *. ** typedef _Deque_iterator <_Tp, _Tp &, _Tp *> iterator; ** Это происходит, когда я меняю свою очередь на сохранение ссылок. – tVl4dimir
Я сожалею об этом, у меня был глупый момент, это должна быть очередь указателей. Я изменил ответ. – Fibbles