Войти
ПрограммированиеФорумОбщее

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

Страницы: 1 2 3 4 5 6 7 Следующая »
#0
17:41, 4 дек 2015

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

Это сообщение сгенерировано автоматически.

#1
17:41, 4 дек 2015

#define DECLARE_EVENT_TRAIT(eventTrait, ...)

m$ $тудия вроде такого не умеет.

#2
17:50, 4 дек 2015

Sbtrn. Devil
> m$ $тудия вроде такого не умеет.

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

#3
3:54, 5 дек 2015

Ошибок и опечаток (чисто по тексту) довольно много. А так - ничего, прикольная и интересная статейка, было приятно почитать. 0r@ngE, спасибо что нашёл время написать!

#4
8:55, 5 дек 2015

0r@ngE
Вижу такие недостатки:

  • нельзя подписаться на определенный объект;
  • тянет за собой жесть в виде половины stl;
  • поиск по именам на каждый raise;
  • Added:
  • чем больше в системе зарегано разных событий, тем тормознее будет каждый raiseEvent, даже если на этот конкретный эвент никто не подписан.
  • #5
    17:04, 5 дек 2015
    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 и так платформонезависим?

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

    #6
    6:26, 6 дек 2015

    Ухх, не ожидал коментариев, спасибо всем. Сейчас постараюсь ответить.

    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  например.

    #7
    10:52, 6 дек 2015

    0r@ngE

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

    #8
    9:32, 7 дек 2015

    Wraith
    > тянет за собой жесть в виде половины stl;
    +
    PS: Кармак приди, порядок наведи.

    #9
    17:49, 7 дек 2015

    programina
    > +
    > PS: Кармак приди, порядок наведи.

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

    #10
    19:38, 7 дек 2015

    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 символа, не считая отступа, - это не код, это какая то "Война и мир" Льва Толстого...

    #11
    19:41, 7 дек 2015

    0r@ngE
    > заменить STL на собственные велосипеды не сложно
    Вам не сложно, а я такое даже прочитать не могу.

    #12
    20:15, 7 дек 2015

    повезло есть variadic templates

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

    #13
    21:44, 7 дек 2015

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

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


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

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

    #14
    22:23, 7 дек 2015

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

    Лично я не сторонник новых стандартов - пусть уж лучше множественного наследования :)

    Страницы: 1 2 3 4 5 6 7 Следующая »
    ПрограммированиеФорумОбщее

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