我試圖做一個方法,從容器類型中挑選一個隨機元素,如std::vector
。之前,我使用的是:從模板模板方法參數獲取類型
std::string pick_random(std::vector<std::string> c) {
int r = std::rand() % ids.size() + 1;
auto it = c.begin();
std::advance(it, r);
return *it;
}
哪個,據我所知,工作正常。這並不是說它是好,只是它似乎是。
我很快就不得不做同樣的事情對另一個容器,所以我嘗試使用模板模板參數,使該方法一般:
template <template<typename element_t> container_t>
element_t pick_random(container_t from) { /* ... */ }
然而,這將引發一個錯誤:
element_t does not name a type
我認爲我的意圖已經足夠清楚,但要重申它:我試圖獲取列表的元素類型。我可以有一個單獨的模板參數,但它不能正確推斷類型。我嘗試了各種不同的版本,但都沒有工作。
任何機會我可以得到一個newb的解釋?我不是說我是一個人,但是......好吧,我是。 –
@QPaysTaxes你試圖得到的是 - 給定一個容器,獲取值類型。值類型是'* begin(容器)'的結果 - 所以這只是直接使用它,而不是通過分解容器類型來嘗試「猜測」值類型。 – Barry
哦,我明白了!謝謝:D –