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

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

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

22 ответов

2 просмотра

Нет ничего плохого в голых указателях на функции, если это указатели на свободные функции. 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, остальное в общем-то можно в пару строк сделать простым трейтом, если очень хочется. Само собой и для указателя тоже

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

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

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Вопрос по WIN32: Насколько я понимаю то все функции win32 привязаны к объектам операционной системы. Например консоль, файл, кисть, окна итд. Следовательно функции win32 упра...
Tommy Vercetti
6
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
кто-то пользуется компонентами rx ? как их лучше ставить, через OPM? (lazarus)
Iluha Companets
15
Hello, can I install macOS and run flutter on a virtual machine? Is it possible to print for iphone?
Mazones
11
Дороу! У кого-нибудь есть в загашнике проверенная функция экранирования, аналог re.escape в Python? Из доки: » Escape all the characters in pattern except ASCII letters and n...
Daniil Smolyakov
9
В смысле более затратная? Общая стоимость владения лошадью меньше, чем автомобиля. В среднем.
Sergej R
10
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Скажите, тут нет проблемы? IMyInterface1 = interface function GetInterface2: IInterface2; ... function TMyInterface.GetInterface2: IInterface2; begin Result := TI...
Ruslan aka DUDE
18
Карта сайта