Я хочу, чтобы моя шаблонная функция
template<class function>
int probe(function call = [] (int a, int b) { return a+b; })
{
return call(10, 10);
}
могла получать указатели на функции и вызывать эту функцию позже. Эта выдержка верна, и компилятор не жалуется на ошибки. Давайте рассмотрим такую программу
#include <iostream>
#include <string>
template<class function>
int probe(function call = [] (int a, int b) { return a+b; })
{
return call(10, 10);
}
int main()
{
std::cout << probe([](int a,int b){ return a-b;});
}
Программа выводит то, что я ожидал: ноль. Однако я явно обозначил для этого вызова, какую функцию я передаю - я имею в виду это лямбда-выражение в скобках [](int a,int b){ return a-b;}
. Это нормально, пока я ничего не передаю - вызов std::cout << probe();
неверен, однако я ожидал, что функция будет использовать функцию по умолчанию function call = [] (int a, int b) { return a+b; }
. Итак, как мне вызвать функцию, что экземпляр этой функции будет использовать лямбда-выражение по умолчанию в объявлении?