C ++函数模板问题

时间:2011-01-21 15:41:18

标签: c++ templates

我正在寻找lcase / ucase C ++ STL类的最佳方法,我发现了这篇文章:

STL string to lower case

给出的解决方案之一是:

#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 */);

这是一次性(特殊情况),还是我遗漏了一些基本的东西?

2 个答案:

答案 0 :(得分:5)

这称为Template Argument Deduction

Here是解释模板参数演绎的另一篇很好的文章。

答案 1 :(得分:1)

模板参数隐式派生自函数参数。