Re[32]: Исповедь C++ника
От: Тёмчик Австралия жж
Дата: 28.12.20 06:55
Оценка: :)
Здравствуйте, so5team, Вы писали:

S>>>Вот реально не понимаю, как паттерн Visitor поможет при работе с C API. Ладно бы еще какой-нибудь Facade был упомянут, ну или Bridge хотя бы, но Visitor... Просветите старика, плиз.

Тё>>Дано: одно или несколько сторонних API. Нужно: сделать бесшовную интеграцию. Передаём visitor на нужное API. Это широко используемая практика в обработке данных от пачки разных API разных версий.

S>Понятнее не стало. Вот есть C API вида:

S>
S>void * somelib_data_create();
S>void somelib_data_on_ready(void *);
S>void somelib_data_destroy(void *);
S>

S>При нажатии на кнопку Ok нужно вызывать somelib_data_on_ready и передать в него указатель, полученный ранее при вызове somelib_data_destroy.

onData(char[] buffer, int offset, int length, Reader *reader) {
    // ...  read envelope
    reader.accept(envelope)
}


S>Каким образом здесь применим Visitor?

В вашем примитивном мирке, действительно, visitor не нужен. У вас нет API

S>>>По поводу накладных расходов все было уже расписано ранее, перечитайте. По поводу "мутно", если вам не понятно, то речь шла про понятность политки владения сущностями в вашем подходе. В C++ сборщика мусора нет. Возвращать голые владеющие указатели так себе способ.

Тё>>Можете сделать умный указатель для subscription.

S>Этого будет мало.

unique_ptr с кастомным deleter-м достаточно.

Тё>>Да, C++ это боль.


S>У вас, похоже, это была боль. Даже нет, у вас это была БОЛЬ. Причем такая, что отзывается до сих пор.

Когда этим занимался, было привычно. Вы просто принюхались — посмотрите на более другие языки, где простейшие вещи не требуют титанических мозгозатрат.

>>>>> Реалтаймовые системы не на плюсах делают.


S>>>Ответили за звиздеж, да.

Тё>>Не на плюсах.

S>Вот опять звиздеж. Делают. В том числе и на современных. В том числе и с использованием кусков из STL. Ничего не мешает в рилтайм-коде использовать std::find, std::accumulate, std::array и подобный код. Да даже аллоцирующие контейнеры вроде vector, map, set можно применять, если они наполняются в момент инициализации приложения.

Какой толк от "аллоцирующие контейнеры вроде vector, map, set", если они не могут аллцировать в момент работы приложения?

S>Если где-то до сих пор в рилтайме ограничиваются C++98, то, скорее всего, из-за отсутствия сертифицированных компиляторов с поддержкой более новых стандартов.


Тё>>Вот вы влезли в тему событийной модели, которой я сейчас плотно занимаюсь (использую RxJs).


S>Да это очевидно, что сейчас у вас с RxJs конфетно-букетный период.

Надеюсь, в течение нескольких месяцев текущий большой проект c RxJS уйдёт в суппорт, а я займусь новым green field проектом, возможно даже на другом языке. Хотя, TypeScript мне понравился.
А Вы так и будете булькаться на уровне "аллоцирующие контейнеры вроде vector, map, set".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.