Closed raidenluikang closed 2 years ago
Есть более универсальное предложение, в том числе решающее и эту задачу. Крайне вероятно, что оно попадёт уже в ближайшие стандарты. Отличие от предложенного вами синтаксиса будет минимальным — в ключевом слове this
перед auto self
, что позволит переиспользовать существующее слово this
вместо того, чтобы занимать self
и принуждать пользователя использовать лишь его, а также в отсутствии необходимости явно передавать self
внутрь вызова self
:
auto factorial = [](this auto self, int n) -> int
{
if (n < 2) return 1;
else return self(s̶e̶l̶f̶, n - 1) * n ;
};
Приняли в C++23 https://wg21.link/p0847
Сейчас лямбду нельзя вызвать сам себя. Для этого иногда придумывает разные хитрости, который не очень то элегантный. Например
либо, такой
Может быть есть ещё другие приёмы, но все они не так элегантно и просто, как вызвать рекурсивной функцией, либо есть накладной расходы как
std::function
.Два типа решение могу предлагать:
self
илиthis_ptr
тому подобное внутри лямбда.