лямбда с шаблонами

В настоящее время я делаю несколько упражнений с шаблонными функциями. У меня была задача написать реализацию алгоритма преобразования. Я сделал это примерно так, и это работает:

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 в своей лямбде.

Я также проверил исходную функцию преобразования, с которой она работает. Затем я проверил реализацию этого, и она, очевидно, реализована с помощью класса шаблона для всей функции. Это правильный способ реализации предикатов с помощью шаблонов?

5
задан Luc Danton 6 October 2011 в 10:39
поделиться