![](/img/trans.png)
[英]How can I read/write an image in C++ using just boost/standard library?
[英]How can I write a template function that takes a generic C++ standard library container
例如,我有一个功能需要能够适用于不同的容器类型
void foo(const std::vector<bar>& param1, const std::vector<double>& params2)
和
void foo(const std::list<bar>& param1, const std::list<double>& params2)
bar
是我写的一个class
。 函数体本身使用通用的C ++标准库函数。
有没有办法可以扼杀这个? 我努力了
template<typename T> void foo(const T<bar>&, const T<double>&)
但这会给编译器带来错误
错误C2988:无法识别的模板声明/定义
我正在使用MSVC2015。
基本上有三种解决方案:
使用模板模板参数 。
使用迭代器(这是标准库本身使用的)
对不同的参数使用不同的模板,让编译器推导出实际的类型。 有了你的功能,它就像是
template<typename T, typename U> void foo(const T&, const U&);
如果您只需要迭代容器的内容,建议使用解决方案2。 如果您需要访问容器本身,建议使用解决方案3。
所谓的模板模板参数将允许您编写所需的代码(如其他答案或CppReference中所示 )。
或者,您也可以编写接受迭代器的泛型函数。 这正是<algorithm>
中的函数的实现方式。 我倾向于认为接受迭代器的函数实际上更灵活,因为调用者可以决定函数需要处理的范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.