Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
GoldenId
 Аватар для GoldenId
45 / 43 / 2
Регистрация: 11.11.2010
Сообщений: 272
Завершенные тесты: 1
#1

[Поток] Один вход, два выхода [Как сделать?] - C++

29.01.2014, 20:35. Просмотров 516. Ответов 7
Метки нет (Все метки)

Речь об STL-ных потоках.
Нужно делать report в файл и на консоль (а может, только на один).
Если я заведу поток rep, как мне сделать, чтобы при
C++
1
rep << "msg";
у меня фактически получилось
C++
1
2
fs << "msg";
cin << "msg";
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2014, 20:35     [Поток] Один вход, два выхода [Как сделать?]
Посмотрите здесь:

Как сделать чтобы поток вызванный дочерним потоком не перебивался другими потоками? C++
Как склеить два файла в один? C++
Как в проэкт запихать два срр-файла (один вызывает другой) C++
C++ Как объединить два массива в один?
C++ Как сделать голосовой поток вывода?
Как два одномерных масива записать в один? C++
Как можно сделать виртуальный поток ввода / вывода? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6471 / 2246 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
29.01.2014, 20:43     [Поток] Один вход, два выхода [Как сделать?] #2
Переопредели для своего класса operator<< и пиши там хоть в 10 файлов.
GoldenId
 Аватар для GoldenId
45 / 43 / 2
Регистрация: 11.11.2010
Сообщений: 272
Завершенные тесты: 1
29.01.2014, 22:20  [ТС]     [Поток] Один вход, два выхода [Как сделать?] #3
А стандартными средствами никак не... вроде
C++
1
2
3
4
5
iostream rep = iostream(...);
rep.addoutput( cin );
rep.addoutput( new ofstream( ... ) ) ;
 
// delete ...;
??

Добавлено через 2 минуты
C++
1
cout
конечно
GoldenId
 Аватар для GoldenId
45 / 43 / 2
Регистрация: 11.11.2010
Сообщений: 272
Завершенные тесты: 1
31.01.2014, 21:30  [ТС]     [Поток] Один вход, два выхода [Как сделать?] #4
актуально
StailGot
27 / 22 / 6
Регистрация: 25.08.2013
Сообщений: 41
01.02.2014, 02:56     [Поток] Один вход, два выхода [Как сделать?] #5
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <fstream>
#include <iostream>
#include <memory>
#include <vector>
 
using namespace std;
 
int main ()
{
  vector<unique_ptr<iostream>> io_map;
  ofstream file( "A:/file.txt" );
 
  io_map.push_back( make_unique<iostream>(cout.rdbuf()) ); // консоль
  io_map.push_back( make_unique<iostream>(file.rdbuf()) ); // файл
 
  for ( auto & output : io_map )
    *output << 42;                // вывод в консоль и в файл
 
  getchar();
  return 0;
}
GoldenId
 Аватар для GoldenId
45 / 43 / 2
Регистрация: 11.11.2010
Сообщений: 272
Завершенные тесты: 1
02.02.2014, 02:03  [ТС]     [Поток] Один вход, два выхода [Как сделать?] #6
StailGot, спасибо, попытка ... чувствуется, что не просто мимо форума проходили .. .)
Но... вообще мне просто странно, что нет стандартного способа сделать, чтобы в одну трубу затекало, а из n труб вытекало то же самое. ...

Ваш, StailGot, вариант не подходит полностью потому что при каждом выводе цикл надо крутить...

да и не зашарил я на данный момент эти C++11 циклы )
stima
432 / 287 / 16
Регистрация: 22.03.2011
Сообщений: 936
Завершенные тесты: 1
02.02.2014, 15:29     [Поток] Один вход, два выхода [Как сделать?] #7
GoldenId, вообще, во первых, Ваша задача не "стандартна", во вторых если за Вас все напишут, что останется Вам?, в третьих без цикла (явного или нет) не обойтись.

Что же насчет "решения" Вашей задачи, то я бы сделал "wrapper" sink, c перегруженным operator<< . Но это так для "поиграться". Если же использовать в проекте, то возьмите к примеру boost log.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2014, 15:48     [Поток] Один вход, два выхода [Как сделать?]
Еще ссылки по теме:

C++ Как сделать отступы или , чтобы входной поток(ввода) отдельно от вывода
Как сделать поток с доступом в приват класса? C++ WinAPI
как собрать два проекта в один C++
Как сложить два символьных массива в один? C++
C++ Как соединить два кода в один?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
StailGot
27 / 22 / 6
Регистрация: 25.08.2013
Сообщений: 41
02.02.2014, 15:48     [Поток] Один вход, два выхода [Как сделать?] #8
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <fstream>
#include <iostream>
#include <memory>
#include <vector>
 
using namespace std;
 
typedef vector<unique_ptr<iostream>> iostreams_t;
 
template<typename _Ty>
iostreams_t & operator<<( iostreams_t & iostreams, const _Ty & val )
{
  for ( size_t i = 0; i < iostreams.size(); ++i )
    *iostreams[i] << val,
    iostreams[i]->flush();    // для записи в файл
 
  return iostreams;
}
 
int main ()
{
  iostreams_t iostreams;
  ofstream file( "A:/file.txt" );
 
  iostreams.push_back( make_unique<iostream>(cout.rdbuf()) ); // консоль
  iostreams.push_back( make_unique<iostream>(file.rdbuf()) ); // файл
 
  iostreams << 42 << " " << "string";
 
  getchar();
  return 0;
}
Yandex
Объявления
02.02.2014, 15:48     [Поток] Один вход, два выхода [Как сделать?]
Ответ Создать тему
Опции темы

Текущее время: 08:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru