decvar
написал 14 августа 2006 года в 17:50 (1014 просмотра)
Ведет себя
как мужчина; открыл 111 тему в форуме, оставил 1838 комментариев на сайте.
SwatLogger& operator <<(std::ostream& (*f)(std::ostream &)) { if (f != std::endl ) if (log) log << f; else std::clog << f; else { time_t now = time(0); std::string str(ctime(&now)); str.replace(str.find('\n'), 1, ""); sstr << '\0'; std::string strbuf = sstr.str(); std::cout << label[sev] << " " << strbuf << f; if (log) log << str << label[sev] << " " << strbuf << f; else std::clog << str << label[sev] << " " << strbuf << f; sstr.freeze(false); sstr.clear(); sstr.seekp(0); sev = sev_trace; } return *this; }
g++ 3.4 на него ругается так:
../include/SwatLogger.h:52: error: assuming cast to type `std::basic_ostream >&(*)(std::basic_ostream >&)' from overloaded function
что вообщем-то полный бред…
в результате ничего кроме как вот такой изъебской конструкции не придумал:
std::ostream& (*pEndl)(std::ostream &) = &(std::endl); if (f != pEndl ) ...
То что я написал — суть подпорка.
Вопрос: кто не прав? я или g++ ????
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Забавно, я всегда думал что конвертация между std::ostream и std::basic_ostream происходит без поблем. Кста, а ostream случайно не потомок basic_ostream-а?
должен быть
слушай, судя по
f — указатель на функцию, которая возвращает ostream и получает ostream. Тогда тут
ты её странно вызываешь…
твои предложения?
ну я так понимаю функцию надо вызывать как
void f(void)
что void f(void)? у тебя параметром в твой логгер, что передаётся? указатель на функцию, вот посмотри какие у неё параметры…