有一个代码给出错误,这对我来说是完全不清楚的。
我想要的是通过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
识别为类名?
编译器错误?
答案 0 :(得分:2)
这是一个简单的语法错误。你的意思是:
template<typename Iter, typename S>
S mean(
Iter begin,
const Iter& end,
typename std::iterator_traits<Iter>::value_type S::* v)
{
// ...
}