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

Довольно банальный вопрос, как сделать список функий их которого можно

из извлекать (типо +=/-= в с# эвентах), только через new?

47 ответов

26 просмотров

Список функций? std::vector<std::function<void(void)> Если про делегаты, то в плюсах их нет

Ну std::vector например возми..

N-2 Автор вопроса
Ilya Zviagin
Ну std::vector например возми..

И как от туда удалять? Если std:: function использовать?

N 2
И как от туда удалять? Если std:: function использ...

Непонятно что вы хотите и для чего

N-2 Автор вопроса
Ilya Zviagin
erase

Функции(std::function) на равенство нельзя проверять

N 2
C# подобный эвент тупо

Не надо задавать вопросы в стиле "как мне на А сделать как в Б"

Ilya Zviagin
Я не говорил про std function

Ну а что хранить в векторе тогда? Указатели на функции?

Ilya Zviagin
Да, меня бы это в вполне устроило

Не знаю, мне бы еще лямбд хотелось впихивать в качестве коллбеков

Слава
Не знаю, мне бы еще лямбд хотелось впихивать в кач...

Хотя они кастятся к указателю если состояния не хранят

N 2
C# подобный эвент тупо

Можешь взять Qt и не париться

Слава
Функции(std::function) на равенство нельзя проверя...

Кроме того, надо - ну сделай ты отдельный объект врапер для функции и идентификатора. Со сравнением.

N-2 Автор вопроса
Слава
Можешь взять Qt и не париться

Я на телефоне программирую у меня только стдлиба

Ilya Zviagin
Кроме того, надо - ну сделай ты отдельный объект в...

Идентификатор брать откуда-то надо, а глобальный счетчик заводить не хочется

Слава
Можешь взять Qt и не париться

А лямбды ты никуда не поместишь, они разного типа

N-2 Автор вопроса
Ilya Zviagin
Кроме того, надо - ну сделай ты отдельный объект в...

Что взять за индетификатор? Индекс в массиве, а если я стер, надо перемапить индексы а это О(Н)?

N 2
Я на телефоне программирую у меня только стдлиба

А что пишешь на телефоне вообще? Для чего эвенты понадобились

N 2
Иговой движок

"Безумству храбрых поём мы пестню!"

N-2 Автор вопроса
Ilya Zviagin
Адрес функции например

Очень опасно, лямбду лучше бы копировать в этом случае

N 2
Иговой движок

А как жизнь до того дошла что на телефоне надо писать?

N-2 Автор вопроса
Ilya Zviagin
"Безумству храбрых поём мы пестню!"

Да нормас пока в метро едешь спустя пару месяцев довольно большой проект получается

Слава
?

Каждая лямбда обладает своим собственным, уникальным типом данных. Ни в массив, ни в вектор, ни в какой другой контейнер нельзя поместить лямбду. Можно взять адрес лямбды (хотя думаю, это запрещено) и положить в void* Но тогда когда ты из void* вытащишь этот адрес, его надо преобразовать к типу лямбды, а ты его НЕ ЗНАЕШЬ. Так что никаким образом лямбды нельзя для этого использовать. Можно использовать лямбды без захвата с одной сигнатурой. Да, можно. Но это , по сути, частный случай функции с этой же сигнатурой.

std::vector<std::unique_ptr<Event>>, где Event - абстрактный интерфейс для Callable объектов, вас не устроит?

N-2 Автор вопроса
I
std::vector<std::unique_ptr<Event>>, где Event - а...

Ну это с new уже, это не оч удобно, хотя похуй, выбора нет

I
std::vector<std::unique_ptr<Event>>, где Event - а...

Тоже кстати вариант, и неплохой.

Ilya Zviagin
Каждая лямбда обладает своим собственным, уникальн...

Можно в std::function складывать. Можно еще упароться по тайпклассам и dyno заюзать(но это для извращенцев). Остается только знать сигнатуру. Ну и идентификаторы откуда-то доставать.

I
И побыстрее, наверное

std::function может функции или с маленьким стейтом на куче не выделять

N 2
Иговой движок

Это круто. Расскажи поподробнее ! А какую графическую подсистему ты используешь ? OpenglES или что то другое может уже придумали

Слава
std::function может функции или с маленьким стейто...

Стирание типа ведь через хелперы абстрактного типа работает? Хелпер придется выделять в любом случае из кучи? Наличие хелпера добавляет еще один уровень косвенности?

I
Стирание типа ведь через хелперы абстрактного типа...

Ну можно сделать условно char buff[sizeof(T)]; new (buff) T();

Слава
Ну можно сделать условно char buff[sizeof(T)]; ne...

Тип хелпера T же у нас абстрактный, как от него sizeof взять, чтобы любой хелпер в std::function разместить?

I
Тип хелпера T же у нас абстрактный, как от него si...

Конструкторы и операторы присваивания у std::function шаблонные

Слава
Конструкторы и операторы присваивания у std::funct...

Ну а буфер char buff[sizeof(T)] ведь не в шаблонном классе обязан находиться? Может тогда sizeof(T) зависить от параметра шаблона?

I
Ну а буфер char buff[sizeof(T)] ведь не в шаблонно...

В классе выделяешь поле с буффером определенным. Сравниваешь размер Т если он меньше кладешь туда, если нет то в куче. Можешь про SOO почитать

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

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

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