Re: конвейерная обработка данных
От: Кодт Россия  
Дата: 28.09.13 14:04
Оценка: 12 (1) +1
Здравствуйте, niXman, Вы писали:

X>расскажите, как бы вы реализовали подобную задачу, и почему именно так?


У засовывания всего в шаблон есть один маленький минус: сложно параметризовать в рантайме.
Например, у модуля сжатия могут быть параметры — степень сжатия, размер словаря и/или окна.
Тащить это всё в шаблон — можно, но каждый раз мы будем получать новый тип.

Первый способ — делать двухэтажную конструкцию
typedef megaclass< helper1, helper2, helper3 > mega123;

mega123 m; // все настройки по умолчанию
mega123 n( helper1(x,y,z), helper2(), helper3(t,u) ); // частные настройки

как это делается, к примеру, у std::map — где можно настраивать компаратор и аллокатор.
Это осмысленно, когда таких объектов много, и они предполагаются долгоживущими — это статические переменные, члены класса и т.д. — и ими можно как-то обмениваться.

Если же объект утилитарный, то больше подходит другой способ: конструирование по месту
auto m = megaclass().use(helper1()).use(helper2()).use(helper3());
auto n = megaclass().use(helper1(x,y,z)).use(helper2()).use(helper3(t,u));
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.