Есть некоторое количество хитровыкрученных контейнеров (многомерных массивов), параметризованных по типу ячейки, размерности и ХЗ чему еще. Каждый из них знает как его надо оптимально обходить, и даже как его надо оптимально обходить в несколько потоков. Речь идет о каких то редуктивно-подобных операциях, т.е. об операциях которые производится над каждым из элементов независимо, последовательность обхода элементов не важна (типа расчета суммы, поиска мин-макс и пр.), но операция может зависеть от координат элемента в контейнере.
STL-подобных итераторов для контейнеров НЕТ (и не будет).
Интересует концепция интерфейса для этого хозяйства. Желательно что бы оно было дост. компактным (т.е. минимум лишних телодвижений), сопровождалось минимумом накладных расходов (типа вирт. ф-й) и допускало относительно безболезненное протаскивание в питон через SWIG (это скорее пожелание).
Пока приходит в голову:
1) у контейнера есть метод for_each принимающий функтор. Я с функторами в плюсах не работал, представляю что оно будет довольно компактно, но запутанно для неподготовленого пользователя. Ни о каких питонах речь не идет (SWIG это точно не съест), чего делать в многопоточном варианте ХЗ.
2) у контейнера есть метод
template <typename Q, typeanme ... Qargs> void for_each(Q q, Qargs... qargs);
3) у контейнера есть метод
template <typename Q> void for_each(Q& q);
class Q{
...
Q(const Q&);
void operator()( ... ); // вызывается для каждого аргумента, сигнатуру писать не буду
void join(Q& other);
};
М.б. еще какие то варианты есть?