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

Как лучше хранить указатели на свободные функции и члены классы

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

22 ответов

20 просмотров

Нет ничего плохого в голых указателях на функции, если это указатели на свободные функции. std::function добавляет немного оверхеда. Явно сигнатуру указывать нужно (в общем-то как и в поинтерах)

Max Kolesnikov
Нет ничего плохого в голых указателях на функции, ...

Ключевое слово в предложении про оверхед "немного"

Michael-Chambers Автор вопроса
Max Kolesnikov
Ключевое слово в предложении про оверхед "немного"

Одна лишняя аллокация не изменит мир в моём случае

Michael Chambers
Одна лишняя аллокация не изменит мир в моём случае

Тогда std::function, но я все же считаю что поинтеры для свободных функций - ок

Michael-Chambers Автор вопроса
Max Kolesnikov
Тогда std::function, но я все же считаю что поинте...

У меня мемберы и свободные функции вперемешку

Michael-Chambers Автор вопроса
Max Kolesnikov
Тогда std::function однозначно

А в чем будет принципиальная разница? То что std function спасёт от вызова после смерти this?

Michael Chambers
А в чем будет принципиальная разница? То что std f...

Разница по сравнению с чем? Если там мембер-функции в перемешку со свободными функциями, альтернатив нет

Michael-Chambers Автор вопроса
Max Kolesnikov
Разница по сравнению с чем? Если там мембер-функци...

Сейчас всё кастуется к указателям на члены поэтому альтернативы есть

Michael-Chambers Автор вопроса
Michael Chambers
Я бы не был так уверен)

Мы не будем вспоминать извращённые способы вроде enable_shared_from_this

Dmitriy [Отпуск]
Мы не будем вспоминать извращённые способы вроде e...

К сожалению, это иногда единственный способ, например в asio :)

Max Kolesnikov
К сожалению, это иногда единственный способ, напри...

Ничуть. За всё время использования asio-асинхронщины почти всегда удавалось избегать этой жути.

Michael Chambers
Сейчас всё кастуется к указателям на члены поэтому...

Признаться, никогда указателями на методы не пользовался, разве у них тип не отличается от указателя на голую функцию с той же сигнатурой? Да и синтаксис вызова будет другой, как их можно хранить в одном контейнере?

Michael-Chambers Автор вопроса
Max Kolesnikov
Признаться, никогда указателями на методы не польз...

Отличается тип но у нас есть касты. Поэтому можно

Michael Chambers
Отличается тип но у нас есть касты. Поэтому можно

Ну вот уже некрасиво получается, уже один из плюсов замены на std::function - type erasure до абстрактного функтора

Michael-Chambers Автор вопроса
Max Kolesnikov
Ну вот уже некрасиво получается, уже один из плюсо...

Такой себе плюс чтобы переписывать кучу всего. Хотелось бы узнать есть ли стоящие того преимущества

Michael Chambers
Такой себе плюс чтобы переписывать кучу всего. Хот...

А какие еще могут быть преимущества? У вас просто указатель на функцию, тут никакой магии быть не может Ну и качество кода это немалый плюс имхо)

Michael-Chambers Автор вопроса
Max Kolesnikov
А какие еще могут быть преимущества? У вас просто ...

Универсальный тип, из которого можно получить тип возвращаемого значения, количество аргументов и т.д.

Michael Chambers
Универсальный тип, из которого можно получить тип ...

Ну да, первое это std::function<...>::result_type, остальное в общем-то можно в пару строк сделать простым трейтом, если очень хочется. Само собой и для указателя тоже

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

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

а через 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
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
1
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Карта сайта