В настоящее время я делаю несколько упражнений с шаблонными функциями. У меня была задача написать реализацию алгоритма преобразования. Я сделал это примерно так, и это работает:
template
out stransform(in b, in e, out d, T p(const T&)) {
while (b != e)
*d++ = p(*b++);
return d;
}
Как и в случае с обычным преобразованием, мне нужно вызвать предикат с явным типом, например
stransform(begin(vec1), end(vec1), back_inserter(vec2), predi);
Теперь я наткнулся на лямбды C ++ 11 и захотел вызвать мою функцию следующим образом:
stransform(begin(vec1), end(vec1), back_inserter(vec2), [] (double x) ->double {return x * 10;} );
При этом я получаю ошибку компилятора, что тип не может быть выведен. Это то, чего я не понимаю, поскольку я фактически дважды определяю тип T в своей лямбде.
Я также проверил исходную функцию преобразования, с которой она работает. Затем я проверил реализацию этого, и она, очевидно, реализована с помощью класса шаблона для всей функции. Это правильный способ реализации предикатов с помощью шаблонов?