Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Простая система событий на С++11 (комментарии)

Простая система событий на С++11 (комментарии)

Поделиться
Страницы: 1 2 37 8 Следующая »
0r@ngEПостоялецwww4 дек. 201517:41#0
Простая система событий на С++11 (комментарии)
Это сообщение сгенерировано автоматически.
Sbtrn. DevilЗабаненwww4 дек. 201517:41#1
#define DECLARE_EVENT_TRAIT(eventTrait, ...)

m$ $тудия вроде такого не умеет.
0r@ngEПостоялецwww4 дек. 201517:50#2
Sbtrn. Devil
> m$ $тудия вроде такого не умеет.

Чего именно ?  Если вы про __VA_ARGS__ в макросах - то умеет еще с бородатых времен.

slava_mibМодераторwww5 дек. 20153:54#3
Ошибок и опечаток (чисто по тексту) довольно много. А так - ничего, прикольная и интересная статейка, было приятно почитать. 0r@ngE, спасибо что нашёл время написать!
WraithПостоялецwww5 дек. 20158:55#4
0r@ngE
Вижу такие недостатки:
  • нельзя подписаться на определенный объект;
  • тянет за собой жесть в виде половины stl;
  • поиск по именам на каждый raise;
    Added:
  • чем больше в системе зарегано разных событий, тем тормознее будет каждый raiseEvent, даже если на этот конкретный эвент никто не подписан.
  • GorunuchПостоялецwww5 дек. 201517:04#5
    typedef std::unordered_map<std::size_t, std::shared_ptr<BasicEvent>> EventsMap;
    Не лучше ли в данном случае использовать std::unique_ptr?
    std::hash<std::string> hasher;
    result = hasher(traitName);     // TODO: replace this with something platform-independent
    Вопрос к комментарию, разве std::hash и так платформонезависим?

    Статья понравилась, спасибо.

    0r@ngEПостоялецwww6 дек. 20156:26#6
    Ухх, не ожидал коментариев, спасибо всем. Сейчас постараюсь ответить.

    slava_mib
    > Ошибок и опечаток (чисто по тексту) довольно много.
    Виноват. Пишу в слепую ибо нет под рукой клавиатуры с кирилицей. Вроде вычитывал текст. Пройдусь еще разок, спасибо!

    Wraith
    > Вижу такие недостатки:
    > нельзя подписаться на определенный объект;
    > тянет за собой жесть в виде половины stl;
    > поиск по именам на каждый raise;
    > Added:
    > чем больше в системе зарегано разных событий, тем тормознее будет каждый
    > raiseEvent, даже если на этот конкретный эвент никто не подписан.

    По пунктам:
    1) Да, действительно нельзя. Я такое и не закладывал. Но вполне можно создавать локальные EventSystem'ы для объекта, скажем, для общения чисто его компонентов. Тогда понадобятся функции типа local_subscribe и local_raise.
    2) Ну, в этом и был поинт статьи. При желании можно заменить на свою имплементацию делегатов и контейнеров. Смысл от этого не поменяется.
    3) Нет. Внутри get_event_trait_hash - static результат. Т.е. вычислен он будет лишь раз и затем будет отдан каждый вызов уже готовый. Если юзается GCC можно еще немного оптимизировать заюзав __builtin_expect
    4) Ну, вроде unordered_map довольно быстрый, лично у меня проблем с производительностью пока не было. Но всегда можно оптимизировать это место если упретесь именно сюда.

    Gorunuch
    > Не лучше ли в данном случае использовать std::unique_ptr?
    Лучше, вы абсолютно правы. Спасибо.

    Gorunuch
    > Вопрос к комментарию, разве std::hash и так платформонезависим?
    Я бы не полагался на его одинаковое поведение на разных платформах. Потому и поставил камент - замените на любой подходящий вам алгоритм. FNV  например.

    innuendoПостоялецwww6 дек. 201510:52#7
    0r@ngE

    За что Observer обидел ? Предлагаю дописать вариант с ним

    programinaЗабаненwww7 дек. 20159:32#8
    Wraith
    > тянет за собой жесть в виде половины stl;
    +
    PS: Кармак приди, порядок наведи.
    0r@ngEПостоялецwww7 дек. 201517:49#9
    programina
    > +
    > PS: Кармак приди, порядок наведи.

    И снова мне не понятна суть притензии. Код минимален, заменить STL на собственные велосипеды не сложно.

    programinaЗабаненwww7 дек. 201519:38#10
    0r@ngE
    > И снова мне не понятна суть притензии
    STL
    > Код минимален
    template <std::size_t N> struct is_placeholder<ev::detail::placeholders_generator<N>> : std::integral_constant<std::size_t, N + 1>{};

    134 символа, не считая отступа, - это не код, это какая то "Война и мир" Льва Толстого...

    programinaЗабаненwww7 дек. 201519:41#11
    0r@ngE
    > заменить STL на собственные велосипеды не сложно
    Вам не сложно, а я такое даже прочитать не могу.
    IROV..Постоялецwww7 дек. 201520:15#12
    повезло есть variadic templates

    вот как это можно сделать по классике
    http://codepaste.net/npwwi1

    0r@ngEПостоялецwww7 дек. 201521:44#13
    programina
    > 134 символа, не считая отступа, - это не код, это какая то "Война и мир" Льва Толстого...
    > Вам не сложно, а я такое даже прочитать не могу.

    Без обид, но может вам просто рано С++ ?  ;)


    IROV..
    > вот как это можно сделать по классике

    Ну, поэтому я и хотел обратить внимание на то, как в наши дни это можно красиво сократить используя последнии версии стандарта С++.
    Но лично я не сторонник Observer'а изза множественного наследования.

    u960Постоялецwww7 дек. 201522:04#14
    0r@ngE
    > > 134 символа, не считая отступа, - это не код, это какая то "Война и мир" Льва
    > > Толстого...
    > > Вам не сложно, а я такое даже прочитать не могу.
    >
    > Без обид, но может вам просто рано С++ ? ;)

    ну как то  кода Дума по проще выглядит

    Страницы: 1 2 37 8 Следующая »

    / Форум / Программирование игр / Общее

    Тема в архиве.

    2001—2017 © GameDev.ru — Разработка игр