返回类型的模板参数缩减
template-argument-reduction for return type
我有这个函数:
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-我还不太了解模板缩减的内容。
感谢任何解释。
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
关键字的使用,这在指定限定的依赖类型名称时是必要的。
template<typename T>
std::vector<std::pair< typename T::iterator, typename T::iterator> >
split( const T& vector, size_t slices)
...
}
您缺少typename
,可以替换容器的类型。
您缺少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";关键词?有关CCD_ 6的更多信息。
相关文章:
- 函数作为模板参数,是否对返回类型强制约束
- 在 c++ 中将函数返回类型指定为模板参数
- C++方法是否可以根据传递给构造函数的参数具有不同的返回类型?
- 基于类型作为参数的字符串表示形式具有不同返回类型的函数
- 具有"templated"返回类型和参数的函数指针
- 如何创建两个具有相同名称和不同返回类型并基于布尔参数运行的函数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 有没有办法根据 lambda 参数返回类型部分专用化我的模板化函数?
- 如何定义依赖于参数包转换的函数的返回类型
- 无法推断返回类型的模板参数
- C++模板;作为模板参数传递的函数的自动推导返回类型
- 如何在模板参数中分离函数类型返回类型和参数
- 如何修复用于根据参数返回不同类型的模板类中的错误C2679?
- 为什么函数返回类型中不允许参数推导?
- 模板化函数以从输入参数推断返回类型 stl-container
- 将 2D 数组作为函数参数,并返回 2D 数组作为函数的返回类型
- 推论成员函数参数 /返回类型
- C++ 基于模板参数返回类型的模板函数
- 根据参数返回类型
- 隐藏规则-参数/返回类型必须相同吗?