在模板化数据结构上调用begin()或end()

时间:2019-06-08 20:18:35

标签: c++ templates

我正在尝试使用remove_if STL函数,并且正在传递地图,unordered_map或矢量。所有这些函数都带有返回迭代器的函数.begin().end()。编译器不允许我调用模板变量上的函数

我尝试同时使用.begin().end()以及begin()end()

template<typename FUNCTOR, typename datastructure>
void deleteFromHelper(FUNCTOR func, datastructure table)
{
    std::remove_if(table.begin(), table.end(), func);
}

其中table是unorded_map,map或vector。 func是自定义仿函数

编译器说: Error C2228 left of '.begin' must have class/struct/union

1 个答案:

答案 0 :(得分:0)

看起来像MSVC错误,gcc非常满意,请参阅:

https://wandbox.org/permlink/KuzZrEriPQerBoou

但是,如果像我的示例一样使用模板推导,是否指定了/ std:c ++ 17? (而且我认为这在MSVC中可能仍不完整。)