我有这个功能:
std::vector<std::pair<std::vector<int>::iterator, std::vector<int>::iterator> >
split( const std::vector<int>& vector,size_t slices){
...
}
因为它非常冗长,我可能需要在将来拆分其他类型的载体,我想让它基于模板,但是这个试用失败了:
template<typename T>
std::vector<std::pair< std::vector<T>::iterator, std::vector<T>::iterator> >
split( const std::vector<T>& vector, size_t slices)
...
}
我可以看到两个问题: 1 - 我不能使用矢量或地图或列表,只能使用矢量。 2 - 我还没有很好地理解模板减少的东西。
任何解释都赞赏。
答案 0 :(得分:1)
1 - 我无法使用矢量或地图或列表,[...]
如果您想要一般地处理所有容器,那么您不应该首先使用std::vector
模板(并且您不应该将您的函数参数vector
命名为):
template<typename C>
std::vector<std::pair<typename C::iterator, typename C::iterator>>
split(C const& cont, size_t slices)
{
...
}
另请注意typename
关键字的使用,这在指定限定的依赖类型名称时是必需的。
答案 1 :(得分:1)
template<typename T>
std::vector<std::pair< typename T::iterator, typename T::iterator> >
split( const T& vector, size_t slices)
...
}
您缺少typename
,您可以替换容器的类型。
答案 2 :(得分:0)
您错过了typename
:
template<typename T>
std::vector<
std::pair<
typename std::vector<T>::iterator,
typename std::vector<T>::iterator
>
>
split( const std::vector<T>& vector, size_t slices)
{ /* ... */ }
有关typename
。