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

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

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

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

Если вы про 3-й Дум, то ему 11 лет ему уж как, естессно он проще выглядит ;)
К тому же Кармак сам не раз заявлял что он не сторонник С++, а пишет в стиле "Си с классами".
Хотя с эстетической точки зрения - мне код Дума 3 тоже нравится, но те игнорировать же теперь все новое?


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

На ум приходит что-то про вкусы и фломастеры ;)


PS.  Давайте не будем сваливаться в каментах в холивар на тему С++ vs C with classes.  Хотя если наберется достаточное количество противников - я обещаю попросить модераторов удалить статью ;)

#16
23:37, 7 дек 2015

Кармак, говорите?

https://mobile.twitter.com/id_aa_carmack/status/26560399301
https://mobile.twitter.com/id_aa_carmack/status/172340532419375104
https://mobile.twitter.com/id_aa_carmack/status/330381704634179584
https://mobile.twitter.com/id_aa_carmack/status/452586892282695680
https://mobile.twitter.com/id_aa_carmack/status/452582113955426305

http://fabiensanglard.net/doom3/interviews.php :

Today, I do firmly believe that C++ is the right language for large, multi-developer projects with critical performance requirements, and Tech 5 is a lot better off for the Doom 3 experience.

#17
0:16, 8 дек 2015

Я вынужден настойчиво просить перестать флудить.
Я никого не призываю к использованию новых фишек языка С++ у себя, равно как и моего кода.
Данная статья дает пример как можно сделать. Не более.

Будут конструктивные коментарии по теме?

#18
1:09, 8 дек 2015

0r@ngE
> Будут конструктивные коментарии по теме?
Да. Переписать всё это на Си99...

#19
1:55, 8 дек 2015

На мой взгляд статья хорошая, лаконично сделана возможность подписываться на события с произвольным числом параметров.
Что добавил для себя в исходном коде - это возможность подписываться на события-функции

+ Показать
#20
3:06, 8 дек 2015

0r@ngE
> изза множественного наследования
попрошу, тут нету множественного наследования)
а в целом я соглашусь, не "сишное" это дело обсерверы
я бы сказал это у меня было академическое вдохновение.

завтра задам вопрос на форуме как решить одну проблему не прибегая к ним :)

#21
6:08, 8 дек 2015

IROV..
> попрошу, тут нету множественного наследования)

Но оно будет, ведь от этих обсерверов / визиторов придется наследоваться, не так ли? А игровые классы чаще всего от чего-то уже отнаследованы.

#22
6:37, 8 дек 2015

Ну и раз уже пошла такая пьянка, и сравнение моего кода с кодом самого Кармака (спасибо, я польщен таким сравнением ))
То давайте заглянем в исходники Doom 3 BFG Edition, а именно в папочку neo/d3xp/gamesys/
Внимательно изучим их вариант Event System в файлах Event.h / Event.cpp, а затем заглянем в Callbacks.cpp.
Сомневаюсь что это намного изящнее моего варианта, особенно если вам надо это отлаживать.

#23
7:31, 8 дек 2015

Огромное спасибо за статью!

Прочитав её, я понял, что нифига не понял C++ ушёл далеко вперёд с тех пор, когда я подзабил на кодинг :) Читал я про возможности boost, встроенные в C++, конечно, но все эти новые словечки зубрить и зубрить :D

Как все эти годы писались простые сайты и порталы без строгой типизации - непонятно, и без анонимных классов, и с опасным рандомом.

Так и Интернет сильно изменился за последние годы :)

#24
14:02, 8 дек 2015

0r@ngE
> Но оно будет, ведь от этих обсерверов / визиторов придется наследоваться, не
> так ли?
нет не нужно :) ты указываешь метод который вызовется когда придет сообщение.

вот как обещал создал тему, ну и там можно посмотреть как работает обсервер

http://www.gamedev.ru/code/forum/?id=208530

#25
16:37, 8 дек 2015

IROV..
Посмотрел...  Хммм.... Получается на каждый ивент нужно добавлять в класс новый член-обсервер, который будет реагировать на событие?

#26
16:38, 8 дек 2015

0r@ngE
> Получается на каждый ивент нужно добавлять в класс новый член-обсервер, который
> будет реагировать на событие?

Можно кастомизировать старые члены

#27
17:33, 8 дек 2015

innuendo
> Можно кастомизировать старые члены
Ну их в любом случае придется добавлять.

В моем варианте внедрений в класс таки минимальны.

ЗЫ. Я рад что мы таки к конструктиву перешли ;)

#28
22:14, 8 дек 2015

Не нравятся мне эти абстрактные event-системы. Непонятно что это за система такая и какая у нее ответственность. Я предпочитаю написать класс делегат(привет C#). И тогда сразу понятно что это такое.
Delegate.h:

template<typename... Args>
class DelegateTemplate
{
  typedef void(*fp)(Args...);
  std::vector<fp> _functions;

public:

  void Add(fp func)
  {
    _functions.push_back(func);
  }

  void Invoke(const Args&... args)
  {
    for (auto func : _functions)
      func(args...);
  }
};
/* Специализации делегата для конретных функций */
typedef DelegateTemplate<> Delegate;
//...

Пример использования:

#include "Delegate.h"
void event_handler1()
{
}

void event_handler2()
{
}

void main()
{
  Delegate d;

  d.Add(event_handler1);
  d.Add(event_handler2);

  d.Invoke();  // Вызовет event_handler1(), event_handler()
}

А так спасибо за статью! Наконец-то вдохнул свежего воздуха.

#29
22:27, 8 дек 2015

k-payl
> Я предпочитаю написать класс делегат(привет C#)

Ненавижу делегаты!

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

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