Re[2]: Манипуляторы потоков
От: Аноним  
Дата: 05.10.05 04:31
Оценка:
C>Вовсе не вижу причин обязательно реализовывать манипулятор через вывод в поток функции от потока…

Смысл в том что бы не трогать класс потока. Вовторых, черезмерная перегрузка оператора вывода может вызвать ряд проблем.

К>.....
К>void doit(std::ostream&, int t1=0, int t2=0);
К>void hello(const char*, std::ostream&);
К>void byebye(std::ostream&, const char*);
К>void jabberwacky(int x, int y, int z, int t, std::ostream&);
К>.....
К>// если нельзя просто записать  cout << doit, всегда можно завернуть её в fmanip
К>std::cout << fmanip(doit);
К>// связывать можно любым подходящим способом
К>std::cout << fmanip(boost::bind(hello,"world"));
К>std::cout << fmanip(std::bind1st(std::ptr_fun(hello),"world"));
К>// если поток - не последний аргумент, то связываем соответственно
К>std::cout << fmanip(std::bind2nd(std::ptr_fun(byebye),"baby"));
К>// если много аргументов - то boost::bind или boost::lambda нас спасут
К>std::cout << fmanip(boost::bind(jabberwacky,1,2,3,4));
К>// наконец, можно связать заранее
К>boost::function<void(std::ostream&)> f = boost::bind(jabberwacky,1,2,3,4);
К>std::cout << fmanip(f);
К>.....
К>


Спасибо, довольно интересно, но не подходит, виртуальный базовый класс не подходит потому что все эти функции дожны быть встроены. Вариант с fmanip тоже не катит, поскольку в результате это должно выглядеть несколько иначе:

stream << do_this(t1, t2, t3)

       << and_this(t1, t2)
;


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