使用std :: iterator_traits <>

时间:2018-08-05 13:46:57

标签: c++ c++11 templates iterator

有一个代码给出错误,这对我来说是完全不清楚的。 我想要的是通过iterator_traits传递一个指向struct / class成员的指针。

template<typename Iter, typename S>
S mean(Iter begin, const Iter& end, S std::iterator_traits<Iter>::value_type::* v)
{
    //...
}

但是即使在声明此模板化函数时,MSVS2015在上面的代码上也会出现以下错误:

  

错误C2653'value_type':不是类或名称空间名称

但是,没有iterator_trais<...>,即

template<typename Iter, typename S>
S mean(Iter begin, const Iter& end, S Iter::value_type::* v)
{
    //...
}

一切正常编译。

为什么无法将value_type识别为类名?

编译器错误?

1 个答案:

答案 0 :(得分:2)

这是一个简单的语法错误。你的意思是:

template<typename Iter, typename S>
S mean(
    Iter begin,
    const Iter& end,
    typename std::iterator_traits<Iter>::value_type S::* v)
{
    // ...
}