Тяжело в С++ без макропроцессора :)
От: Евгений Музыченко Франция http://software.muzychenko.net/rus
Дата: 16.04.20 11:27
Оценка:
Вот есть в DirectShow интерфейс IMediaSeeking, в нем 17 методов. Правила обработки для финального (render) фильтра предусматривают прозрачную передачу всех вызовов предыдущему фильтру. Только одно это требование предполагает тупое выписывание определений всех методов, с проверками и вызовами целевых, а при наличии макропроцессора их можно было бы свести в изящную таблицу, и генерировать и объявления, и определения, и вызовы методов по ней. Для фильтра с единственным входным пином можно было бы вообще использовать стандартные Base Classes, где все это уже когда-то трудолюбиво выписано.

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

Так что для реализации требования нужно либо в реализацию каждого из методов вставить отдельный цикл со всей этой логикой, либо складывать параметры в объединение и передавать его переходнику, который уже организует цикл, в каждом проходе определит нужный метод, вызовет его с соответствующими параметрами, и выберет подходящее значение для возврата.

Ну не извращение ли — выписывать всю эту байду, пусть даже при наличии copy/paste, замены с регулярными выражениями и т.п.?
макропроцессор таблица метод список условие
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.