我正在寻找lcase / ucase C ++ STL类的最佳方法,我发现了这篇文章:
给出的解决方案之一是:
#include <algorithm>
#include <string>
std::string data = “Abc”;
std::transform(data.begin(), data.end(), data.begin(), ::tolower);
但是,转换在stl_algo.h中定义为:
template<typename _InputIterator, typename _OutputIterator,
typename _UnaryOperation>
_OutputIterator
transform(_InputIterator __first, _InputIterator __last,
_OutputIterator __result, _UnaryOperation __unary_op)
{
...
那么如何在不提供模板实例化参数的情况下调用它呢?
为了澄清我的问题,我希望将变换函数调用为:
transform(std::string::iterator, std::string::iterator,
/* not sure what to put here for the predicate */);
这是一次性(特殊情况),还是我遗漏了一些基本的东西?
答案 0 :(得分:5)
这称为Template Argument Deduction。
Here是解释模板参数演绎的另一篇很好的文章。
答案 1 :(得分:1)
模板参数隐式派生自函数参数。