Быстрые делегаты C++ [C++]

  • На форуме работает ручное одобрение пользователей. Это значит, что, если Ваша причина регистрации не соответствует тематике форума, а также Вы используете временную почту, Ваша учётная запись будет отклонена без возможности повторной регистрации. В дальнейшем - пожизненная блокировка обоих аккаунтов за создание мультиаккаунта.
  • Мы обновили Tor зеркало до v3!
    Для входа используйте следующий url: darkv3nw2...bzad.onion/
  • Мы вновь вернули telegram чат форуму, вступайте, общайтесь, задавайте любые вопросы как администрации, так и пользователям!
    Ссылка: https://t.me/chat_dark_time

GM`ka

Ненадежный

GM`ka

Ненадежный
13 Сен 2015
294
157
Отличные делегаты с++
Описание :
Дон Клагстон хорошо описал указатель функции-члена и его поведение в статье: "Указатели функции-члена и наиболее быстрые делегаты C++". Вкратце, указатели функции-члена не могут быть присвоены указателю данных void *, поэтому нужно осторожно обращаться с указателем функции-члена как с данные (функтор). FastestDelegate Дона – это самый быстрый делегат, как он утверждает, но он использовал reinterpret_cast<>, чтобы обмануть компилятор, что он назвал 'хитрым трюком' в своей статье.

Позже Сергей Рязанов представил быстрый делегат C++, который он считал таким же быстрым, как и FastestDelegate Дона, но полностью совместимым со стандартами C++. Его метод состоит в использовании шаблонизированной статической функции-члена ('заглушки'), чтобы сохранять/восстанавливать информацию о вызове функции (возвращаемый тип, тип аргумента, cv-спецификатор и зависящее от платформы соглашение о вызове) во время компиляции. В реальности это не является чем-то новым, поскольку аналогичный подход уже был представлен Ричем Хикеем в его статье "Обратные вызовы в C++ с не-типовой параметр шаблона. К сожалению, не многие доступные для приобретения компиляторы поддерживают эту стандартную возможность C++. Поэтому его код в некотором смысле не является переносимым. использованием шаблонов-функторов", 1994. Рич называл такую статическую функцию-член функцией 'переходником'. Тем не менее, метод Сергея уникален, так как он передает информацию о вызове члена-функции через

Есть еще одна отличная статья о том, как реализовать делегаты C++: "Еще одна реализация обобщенных функторов на C++", автор Алексей Трунов. Он объясняет и всесторонне анализирует требования обобщенных функторов и проблемы существующих делегатов.

Кстати, эти рассматриваются как 'быстрые', так как они могут избежать выделения памяти кучи для хранения указателей членов-функций, в отличие от boost::function.
Очередной быстрый делегат C++ - что нового в нем?

В нашем быстром делегате нет ничего нового. Все возможности, показанные в этой статье, уже существуют в других реализациях.
Быстрый делегат. (В большинстве случаев не используется выделение памяти кучи.)
Поддерживает три вызываемых объекта (свободная функция, функция-член и функтор).
Совместимы со стандартами C++, поэтому портативны (проверены в VC6, VC71, и DEV-C++ 4.9.9.2 (Mingw/gcc 3.4.2)).
Совместимы со стандартной библиотекой шаблонов (STL), подходят для конструирования копий и способны присваиваться.
Равенство, меньше чем, и больше чем объекты сравнения.
Правильность Cv-спецификатора (const).
Поддержка зависящих от платформы соглашений о вызове (__stdcall, __fastcall, __cdecl).
Предпочтительный синтаксис, переносимый синтаксис, или даже смешанный.
Смягчение проверки соответствия типов.
static_assert во время компиляции.
Сохраняет только указатель (ссылку) на связанный объект или копирует связанный объект внутри. (новое)
Сохраняет интеллектуальный указатель на связанный объект внутри. (новое)
Пользовательский распределитель памяти. (новое)
Настройка поведения/функций делегата путем указания соответствующих макроопределений.
 

О нас

  • Наше сообщество существует уже много лет и гордится тем, что предлагает непредвзятое, критическое обсуждение различных тем среди людей разных слоев общества. Мы работаем каждый день, чтобы убедиться, что наше сообщество является одним из лучших.

    Dark-Time 2015 - 2022

    При поддержке: XenForo.Info

Быстрая навигация

Меню пользователя