170 похожих чатов

Привет! Подскажите как мне ограничить агрумент функции только лямбдами? Т.е.

я хочу принимать аргумент только лямбда функции (исключить функторы и указатели на функцию). Сейчас вот так

template <typename C>
void callOnce(C&& c)
{
static_assert(std::is_class_v<C>, "must be a lambda type");
static_assert(std::is_invocable_v<C>, "must be a lambda type");
[[maybe_unused]] static bool is_called = (c(), true);
}

16 ответов

12 просмотров

лямбда же и есть функтор, как их можно исключить?

Но лямбда это и есть функтор же

Anton-Glukhov Автор вопроса
Андрей Таусинов
лямбда же и есть функтор, как их можно исключить?

хмм, ну т.е. класс с перегруженным оператором () тоже самое что и лямбда? только синтаксически разница?

Anton Glukhov
хмм, ну т.е. класс с перегруженным оператором () т...

лямбда превращается в класс c оператором ()

Anton-Glukhov Автор вопроса
Mikail Bagishov
лямбда превращается в класс c оператором ()

ок, тогда разрешить функтор (лямбду) и запретить указатель на функцию и наверное std::function - не уверен в этом

Anton Glukhov
хмм, ну т.е. класс с перегруженным оператором () т...

разница еще в том, что тип заранее неизвестнен и для лямбды он уникален

Функтор может хранить состояние

Типа, задача "позвать функцию один раз" уже решается std::call_once

Anton-Glukhov Автор вопроса
Mikail Bagishov
Типа, задача "позвать функцию один раз" уже решает...

я знаю но мне не нравится что там объет должен быть

Sergey
Функтор может хранить состояние

и лямбда тоже может иметь и захват и mutable на нём

Anton Glukhov
ок, тогда разрешить функтор (лямбду) и запретить у...

Указатели можно отсеить через is_pointer. Еще можно застраховаться от ссылки на функцию через is_function<remove_reference>.

Sergey
Можно пример?)

https://gcc.godbolt.org/z/79zzGsYMM такой сойдет?

Sergey
Функтор может хранить состояние

а лямбда с захватом по значению?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта