因此,我構建了一個模擬器以模擬一些負載平衡算法。我已經創建磁芯和調度員的2個向量,如下所示:如何在隊列中存儲位於矢量內的對象的unique_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並將其存儲在Dispatcher隊列中。我嘗試了很多方法,但似乎C++出於各種原因懲罰了我。我最後一次嘗試是這樣一個從內部調度員:
int kore = random_core();
this->add_core_q(vCore.at(kore));
這給了這個錯誤在編譯時:
錯誤:調用「調度員:: add_core_q不匹配功能(_gnu_cxx :: __ alloc_traits> > :: value_type的&)'
候選人是:
無效調度::廣告d_core_q(核心&)
用於從參數1沒有已知的轉化 '__gnu_cxx :: __ alloc_traits>> :: VALUE_TYPE {又名的std ::的unique_ptr}' 到 '核心&'
如果任何人都可以給我的一個提示,我將不勝感激。提前致謝。
我想你的方法,但是GCC不同意。在編譯期間,在* stl_deque.h *處拋出一個錯誤。 ** typedef _Deque_iterator <_Tp,_Tp&,_Tp *>迭代器; ** 發生這種情況時,我更改我的隊列以存儲引用。 – tVl4dimir
對不起,我當時有一個愚蠢的時刻,應該是一個指針隊列。我已經修改了答案。 – Fibbles