Вопрос о шаблоне функции C ++ - PullRequest
0 голосов
/ 21 января 2011

Я искал лучший способ lcase / ucase класса C ++ STL, и я наткнулся на этот пост:

строка 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 */);

Это единичный случай (особый случай) или я что-то упустил из фундаментального?

Ответы [ 2 ]

5 голосов
/ 21 января 2011

Это называется Вычисление аргумента шаблона .

Здесь - еще одна хорошая статья, объясняющая вывод Аргумента шаблона.

1 голос
/ 21 января 2011

Параметры шаблона неявно выводятся из аргументов функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...