82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
|
|
1 | |
Наследование от ofstream и перегрузка <<14.07.2015, 14:36. Показов 4608. Ответов 70
Метки нет (Все метки)
Добрый день, гуглил на английском языке, но ответа не попалось. Предыстория: некий объекта принимает в качестве параметра ссылку на ostream, куда подсовывается ofstream. Задача в том, что перед действием << требуется сделать дополнительные телодвижения, а точнее обработать данные, которые направляются на выход. Я вижу решение таким, что нужно наследоваться от ofstream и переопределить <<. как это правильно делается нагуглить не удалось. Буду рад приведенным примерам или ссылкам на статьи об этом. Спасибо.
0
|
14.07.2015, 14:36 | |
Ответы с готовыми решениями:
70
Перегрузка ifstream и ofstream? Перегрузка ofstream, istream Перегрузка ofstream / ifstream для классов Перегрузка ifstream и ofstream для работы с файлами в little-endian формате? |
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
|
|
20.07.2015, 16:59 [ТС] | 61 |
если подсунуть cout, то всё норм, всё как положено, если же подсунуть ofsream, то только DEBUG 1
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|||||||||||
20.07.2015, 17:21 | 62 | ||||||||||
VVildVVolf, Вообщем, взял твой код из 4 файлов, написал:
0
|
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
|
|
20.07.2015, 17:58 | 63 |
0
|
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
|
|
20.07.2015, 22:25 [ТС] | 64 |
вообще в реале ошибка вылезает через 100500 пробросов, можете сказать поподробнее, что проделали?
0
|
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
|
|
21.07.2015, 09:36 | 65 |
код очень объемный. реализацию потоков нашел. но где они используются искать долго. может лучше "тренироваться" на "кошках" (маленьких тест-программах)? по существу:
-зачем вам sync если вы будете ловить разделитель в overflow? в том смысле что получая в overflow разделитель вы передаете накапливаемую последовательность куда-то к себе (если нужно) и во внешний поток после чего очищаете накапливаемую последовательность. -не может ли вызов close / деструктора внешнего потока предшествовать деструктору вашего потока? в этом случае вызов sync в деструкторе вашего потока попытается передать накопленную последовательность в уже закрытый / уничтоженный внешний поток.
0
|
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
|
|
21.07.2015, 09:41 [ТС] | 66 |
Прошу прощения, что пришлось искать, сейчас уже я обновил main.cpp, где только создание потока и вывод в него.
просто осталось от примеров этой темы (если даже избавление от него решит проблему, научный интерес к феномену текущей ошибки не гаснет) в плюсах я пока что не умею отслеживать жизнь инъектированных объектов, поэтому всё построено на доверии программисту-писателю (т.е. корректности написания мной программы так, чтоб деструкторы вызывались в нужном порядке).
0
|
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
|
||||||
21.07.2015, 10:00 | 67 | |||||
Сообщение было отмечено VVildVVolf как решение
Решение
ну так и есть:
2
|
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
|
|
21.07.2015, 10:05 [ТС] | 68 |
значит, похоже, синк вызывается слишком поздно...
0
|
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
|
||||||
21.07.2015, 10:07 | 69 | |||||
просто вызовете
Добавлено через 1 минуту они передаются в закрытый поток - вывод уже не идет, поток просто отвергает эти данные
1
|
82 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 54
|
|
21.07.2015, 10:09 [ТС] | 70 |
ясно, теперь я всё понял) благодарю
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
21.07.2015, 10:45 | 71 |
vxg, Во. Браво. Я как-то когда тестировал в своем примере не заморачивался с закрытием потока, поэтому у меня все и проходило.
0
|
21.07.2015, 10:45 | |
21.07.2015, 10:45 | |
Помогаю со студенческими работами здесь
71
перегрузка и наследование. Наследование + перегрузка Наследование и перегрузка << Наследование. Перегрузка операторов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |