История изменений
Исправление DarkEld3r, (текущая версия) :
У тебя аналогичный код и в C++ не скомпилится. У тебя у двух лямбд разный тип.
Хм... в чём-то ты прав. Тем не менее, в С++ можно так:
template<typename T>
int test(T t1, T t2)
{
return t1() + t2();
}
int main()
{
test<int (*)()>([](){ return 10;}, [](){ return 20;});
}
Да, мы тут пользуемся тем, что лямбды приводятся к указателю на функцию, если ничего не захватывают. Если захватывают, то так не получится. Но вообще код не эквивалентен. В отличии от примера на расте, мы тут никаких ограничений на сигнатуру не налагаем (ну кроме вызова без параметров). Правильно будет вот так:
int test(function<int()> t1, function<int()> t2)
{
return t1() + t2();
}
Хотя я, кажется, понял.
Исправление DarkEld3r, :
У тебя аналогичный код и в C++ не скомпилится. У тебя у двух лямбд разный тип.
Хм... в чём-то ты прав. Тем не менее, в С++ можно так:
template<typename T>
int test(T t1, T t2)
{
return t1() + t2();
}
int main()
{
test<int (*)()>([](){ return 10;}, [](){ return 20;});
}
Хотя я, кажется, понял.
Да, мы тут пользуемся тем, что лямбды приводятся к указателю на функцию, если ничего не захватывают. Если захватывают, то так не получится. Но вообще код не эквивалентен. В отличии от примера на расте, мы тут никаких ограничений на сигнатуру не налагаем (ну кроме вызова без параметров). Правильно будет вот так:
int test(function<int()> t1, function<int()> t2)
{
return t1() + t2();
}
Исходная версия DarkEld3r, :
У тебя аналогичный код и в C++ не скомпилится. У тебя у двух лямбд разный тип.
Хм... в чём-то ты прав. Тем не менее, в С++ можно так:
template<typename T>
int test(T t1, T t2)
{
return t1() + t2();
}
int main()
{
test<int (*)()>([](){ return 10;}, [](){ return 20;});
}
Да, мы тут пользуемся тем, что лямбды приводятся к указателю на функцию, если ничего не захватывают. Если захватывают, то так не получится. Но вообще код не эквивалентен. В отличии от примера на расте, мы тут никаких ограничений на сигнатуру не налагаем (ну кроме вызова без параметров). Правильно будет вот так:
int test(function<int()> t1, function<int()> t2)
{
return t1() + t2();
}