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

Привет, а есть возможность передать лямбду с capture в не-шаблонную

функцию?
Сейчас у меня есть функция, принимающая callable:
class ICallable {
public:
virtual void operator()() = 0;
};
void foo(Callable& f) { ... }
Но каждый раз создавать класс-наследник геморно, хочется передавать просто lambda

11 ответов

20 просмотров

Как любит говорить @webreh Костя, любую проблему дизайна можно решить с помощью std::function. Замени Callable на std::function и передавай лябмбду

Судя по всему, здесь больше подойдёт function_ref (в std нет) - не будет аллокаций, но и владения у foo не будет. P.S. При желании можно написать template <class Lambda> class LambdaCallable : public ICallable { Lambda lambda; void operator()() { lambda(); } final }; и сделать implicit конструктор от лямбды. Будет тот же function_ref, но на минималках.

Alexander Karaev
Судя по всему, здесь больше подойдёт function_ref ...

small object optimization buffer вроде бы должен быть достаточно большой, чтобы function_ref передать как function путём [&]

Constantine Drozdov
small object optimization buffer вроде бы должен б...

Да, SOO гарантируется для объектов размером с std::reference_wrapper

Dmitriy [Отпуск]
Да, SOO гарантируется для объектов размером с std:...

Интересное ограничение. В стандарте, ЕМНИП, его нет. На практике у каждого вендора свое (и там пара void* минимум влезет обычно)

Alexander Karaev
Интересное ограничение. В стандарте, ЕМНИП, его не...

В своё время я измерял: MSVC расщедрился аж на 40 байт, у GCC (10 вроде) было 16, а вот древняя Мингва - 8...

Dmitriy [Отпуск]
В своё время я измерял: MSVC расщедрился аж на 40 ...

Вот число 40 у меня тоже где-то в памяти лежало, а mingw можно не учитывать, думаю

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта