c++ - 如何为采用 stl 容器迭代器的函数提供函数签名?
问题描述
我想编写一个my_func
可以这样调用的函数,但不在乎它v
是 a std::vector
,它可以是任何 STL 容器。有点像std::for_each
:
std::vector<std::string> v = {...};
my_func(v.begin(), v.end());
但我无法弄清楚函数签名。
void my_func(??? i1, ??? i2)
{
std::for_each(i1, i2, ...); // dumb example implementation
}
我不擅长模板编程,所以即使查看函数声明std::for_each
也无济于事。
是否有一个简单的实现,或者这从根本上会使模板变量变得混乱?
解决方案
这取决于您希望函数的通用性。如果迭代器类型必须匹配,那么
template <typename T>
void my_func(T i1, T i2)
{
std::for_each(i1,i2,...); //dumb example implementation
}
是你所需要的全部。如果您希望它们能够有所不同,那么您只需要另一个模板参数,例如
template <typename T, typename U>
void my_func(T i1, U i2)
{
std::for_each(i1,i2,...); //dumb example implementation
}
最后,如果您不喜欢处理模板,您可以改用 lambda 并让编译器为您处理。那会给你
auto my_func = [](auto i1, auto i2)
{
std::for_each(i1,i2,...); //dumb example implementation
};
推荐阅读
- reactjs - 单击链接时第二次未在图表中显示数据
- unity3d - 使用 Unity 标准透明着色器的模型相互重叠
- reactjs - 无缝不可变地将我的对象转换为哈希
- symfony - Bootstrap 正确导入但样式不起作用
- php - 在php中获取并显示mysql中相同类型的所有值
- spring-boot - STS 中 Maven 项目的打包问题
- arrays - 制作二进制到十进制转换器,但需要将char数组转换为整数数组
- xamarin - Xamarin iOS 库无法获取位置
- c# - 如何使用 DotVVM 在浏览器中正确查看 pdf?
- visual-studio-code - 是否可以打开和编辑 vsix 包(VS 代码的扩展文件)?如果是,那么如何?