你舉的例子,按照目前的寫,不僅會失敗,因爲比較的編譯,而且因爲模板參數List
cannot be deduced從支撐,初始化列表。
要麼改變的功能
template<class Container, class T>
bool isEqual(Container const& c, std::initializer_list<T> const& l)
或更改你怎麼稱呼它
std::vector<int> v;
auto l = {1, 2, 3};
bool b = isEqual(v, l);
// or
bool b = isEqual(v, std::initializer_list<int>{1, 2, 3});
要解決的比較,因爲伊戈爾在評論中提到的方法,使用
return c.size() == l.size() && std::equal(std::begin(c), std::end(c), std::begin(l));
或者,如果您有權限s到的std::equal
的C++ 14重載採用開始和結束迭代器兩個範圍,則可以跳過該大小檢查
return std::equal(std::begin(c), std::end(c), std::begin(l), std::end(l));
'返回c.size()== l.size()&&的std ::相等(std :: begin(c),std :: end(c),std :: begin(l));' –
比較不是你的例子唯一的問題,'List'不能從braced-初始化列表 – Praetorian