Существует FileOptions. Опция DeleteOnClose, которая могла бы сделать то, что Вы хотите.
Вот ссылка на страница MSDN .
Лямбды - это независимые типы. Код
void h(lambda func)
{
func(2);
}
не имеет никакого смысла, потому что лямбда-выражения не имеют полиморфизма времени выполнения. Напомним, что лямбда эквивалентна
struct unique_name
{
return_type operator()(Arg1 a1, Arg2 a2, ... , Argn an)
{
code_inside_lambda;
}
}
, который сам по себе является уникальным типом. Приведенный выше код будет таким же, как
void h(class C)
{
C(2);
}
, что также не имеет смысла, даже если мы гарантируем, что C имеет operator ()
. Вам нужен шаблон:
template<typename T>
void g(T func)
{
func(2);
}
int main()
{
g([](int x){return x + 2;});
}
Я не вижу причин различать типы функций в зависимости от того, есть у функции имя или нет. Лямбда-функции - это просто сокращение, позволяющее легко определять удобную функцию. Имя или отсутствие имени, поведение функции при вызове такое же.
Подумайте об этом так. В ранней версии вашего программного обеспечения есть предикат, определенный как анонимная функция. Со временем требования усложняются, и ваш предикат тоже становится более сложным - и, возможно, вам нужно вызвать его из более чем одного места. Разумно провести рефакторинг, чтобы у вас была именованная функция.
Нет причин, по которым вызываемая функция (та, которая вызывает предикат) должна заботиться об этом. Простой или сложный, именованный или анонимный - это все еще просто функция-предикат.
Одна небольшая проблема заключается в замыканиях - я не проверял, но, если повезет, C ++ получит вложенные именованные функции с замыканиями, а также лямбды.