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

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

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

47 ответов

24 просмотра

Список функций? 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 почитать

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта