analizer
08.09.2011 15:40 mcabber
Уня-ня, если собрать прогу с -rdynamic, и грузить в неё шаред либу, то эта либа может спокойно вызывать функции реализованные в проге.
У меня МОДУЛЬНОСТЬ!
А эта ваша сворованная ОС так умеет?
Мне такое одно время в личкрафтах нужно было, потом понял, что это ошибка проектирования.
Looks like АРХИТЕКТУРОПРОБЛЕМЫ.
нифига. очень даже полезно. если прога реализует набор коллбэков, которые могут вызывать друг-дружку и хочешь дать возможность плагинам переопределять какие-то из этих коллбэков
Што.
Это и называется архитектуропроблемы.
ваши варианты для обеспечения подобного?
Опиши нормально.
на примере логгинга:
1. Есть прога с логгингом:
а. Функция формирования строчки лога, взять strftime от текущего времени, к нему приписать переданную параметром строку, затем фазу луны (которую возвращает отдельная функция), а затем получившуюся строку передать в 1.б.
б. Функция вывода в файл.
2. Use-case #1: пользователю хочется к строке приписывать ещё и расположение звёзд, определять которое умеет функция из либы:
а. В либе определяем аналог 1.а., но с дописыванием перед фазой луны расположения звёзд. В конце дёргаем 1.б.
б. Грузим либу, видим что аналог 1.а. в ней есть, вызываем его вместо родной функции.
3. Use-case #2: другому пользователю, в зависимости от фазы луны, хотим выводить лог либо в файл, либо в syslog.
а. ... думаю и так понятно
Выставляй точки, в которые позволяешь плагинам регать boost::function'ы, проблем-то.
С кутями — излучать в нужных местах сигналы с модифицированными параметрами.
имхо, не многим лучше такого
Лучше. Точка вызова хука регулирует политику, а не хук.
ок, а как тогда передать в 2.а. функцию вычисления фазы луны?
void PostFormatHook (string& str, ...)
И ничего передавать не нужно.
дописывать её в строку он как будет?
Нахуй? str.append(), и все. Или тебе нужно захуячить между и после?
Аналогичный подход, просто сложнее и этапов больше.
Можно еще передавать прокси-объект со стандартным набором модификаторов строк, но это уже пиздец и лаги в архитектуре.
в boost::signals2 посмотри, там есть концепция Combiner, например.
одному пользователю хочется до, другому — после, третьему вообще фаза луны не сделась, он просто в коллбэк записи в лог запишет текущее время