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

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

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

47 ответов

13 просмотров

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

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

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

коллеги, добрый вечер! А никто не знает как модальная форма может себя закрыть? Ну допустим модальная форма определила, что смысла ей работать нет и хочет вернуть modalResult...
Михаил
83
средствами IBX как-то можно выполнить запрос insert ... returning?
Igor
29
объясните, я прада не понимаю. зачем в перле нужен аниивент? кому он пригодился в действительно нагруженных проектах?
nerv
30
Никто случаем не знает, как по-хорошему делается дозапись текста в edit на винапи?
The Bird of Hermes
25
А какие у этого try практические плюсы перед eval?
Oleg Volkov
41
Hi there everyone Is there anyone who have not started hamster bot yet? I need only one, I'll be glad if you do this for me DM if you haven't yet
Mehrshad
53
Hi, I installed mysql 8 like this: wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.11-1_all.deb sudo dpkg -i mysql-apt-config_0.8.11-1_all.deb sudo apt-get install mysq...
Liran
1
Ребзя, а кто-нибудь делал на сайте Турбо Страницы Яндекса? Какую-то пользу они дают или нет? Приносят ли трафик?
Андрей [aharito] Харитонов
20
option casemap:none includelib kernel32.lib externdef ExitProcess : near .data? x1y1array real4 ?, ?, 0, 0 x2y2array real4 ?, ?, 0, 0 .code DLLEntry proc in...
Юрий
2
ибо зачем нам в перловом сообществе бесполезные потребляди?..
Vadim Goncharov
10
Карта сайта