Манипуляторы потоков
От: Аноним  
Дата: 04.10.05 16:56
Оценка:
Проблема заключается в том что надо написать довольно много манипуляторов с аргументами, как можно это сделать с меньшими усилиями?

Самый короткий способ который мне удолось придумать выглядит примерно так:

template<class T1, class T2, class T3, class T4>
struct manip4_type {
  typedef boost::_bi::bind_t<StreamType&, StreamType&(*)(StreamType&, T1, T2, T3, T4),
          boost::_bi::list5<boost::arg<1>,
            boost::_bi::value<T1>,
            boost::_bi::value<T2>,
            boost::_bi::value<T3>,
            boost::_bi::value<T4>
          > >
          type;
};

inline StreamType& new_manip_func(StreamType &stream, T1 t1, T2 t2, T3 t3) {
  stream.new_manip(t1, t2, t3, t4); return stream;
}
inline manip4_type<T1, T2, T3, T4>::type new_manip(T1 t1, T2 t2, T3 t3) {
  return boost::bind(new_manip_func, _1, t1, t2, t3, t4);
}


manip[1,2,3,4,5,6]_type нужен для определения возвращаемого типа, другого способа опредилить тип bind'а я придумать не смог.

Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.