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

C++

Войти
Регистрация
Восстановить пароль
 
GoldenId
125 / 123 / 32
Регистрация: 11.11.2010
Сообщений: 651
Записей в блоге: 12
Завершенные тесты: 1
#1

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

29.01.2014, 20:35. Просмотров 540. Ответов 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++ WinAPI
У меня есть программа и мне нужно что бы она сама искала друзей онлайн в социальных сетях. Как это реализовать?

Как сделать голосовой поток вывода? - C++
Ну то есть скармливаешь ему строку оператором &lt;&lt;, а он её читает через динамики. Как это сделать?

Как сделать поток с доступом в приват класса? - C++ WinAPI
В общем есть поток, нужно чтобы он имел доступ к приватным методам одного класса, как это реализовать?

Как склеить два файла в один? - C++
Вообщем проблема в том, что мне нужно записывать в начало файла. я создаю новый файл записываю в него информацию, а затем хочу...

Как соединить два кода в один? - C++
Вот код генератора перестановок #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;fstream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt;...

как собрать два проекта в один - C++
Ребята может кто объяснить как собрать два проекта в один. А точнее написал две небольших программки, одна на чистом с++ а другая с...

Как объединить два массива в один? - C++
Вот к примеру есть два массива: int A={1,2,3,4}; int B={5,6,7,8}; Как создать третий массив С , в котором будут содержаться...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
29.01.2014, 20:43     [Поток] Один вход, два выхода [Как сделать?] #2
Переопредели для своего класса operator<< и пиши там хоть в 10 файлов.
GoldenId
125 / 123 / 32
Регистрация: 11.11.2010
Сообщений: 651
Записей в блоге: 12
Завершенные тесты: 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
125 / 123 / 32
Регистрация: 11.11.2010
Сообщений: 651
Записей в блоге: 12
Завершенные тесты: 1
31.01.2014, 21:30  [ТС]     [Поток] Один вход, два выхода [Как сделать?] #4
актуально
StailGot
28 / 23 / 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
125 / 123 / 32
Регистрация: 11.11.2010
Сообщений: 651
Записей в блоге: 12
Завершенные тесты: 1
02.02.2014, 02:03  [ТС]     [Поток] Один вход, два выхода [Как сделать?] #6
StailGot, спасибо, попытка ... чувствуется, что не просто мимо форума проходили .. .)
Но... вообще мне просто странно, что нет стандартного способа сделать, чтобы в одну трубу затекало, а из n труб вытекало то же самое. ...

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

да и не зашарил я на данный момент эти C++11 циклы )
stima
455 / 304 / 23
Регистрация: 22.03.2011
Сообщений: 990
Завершенные тесты: 2
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++
Извиняюсь если вопрос уже был, но я так и не нашел ответа. Как записать два слова в один массив/указатель, чтобы его потом можно было...

Как два одномерных масива записать в один? - C++
как два одномерных масива записать в один???

Как сделать отступы или , чтобы входной поток(ввода) отдельно от вывода - C++
#include &lt;iostream&gt; #define MAX_N 100 using namespace std; class Stack { int st_size=0; int st_elements; ...

Как сделать чтобы поток вызванный дочерним потоком не перебивался другими потоками? - C++
При вызове несколько раз подряд возможен перебив другими потоками.Как бы устранить?Я вот думаю что нужно повысить приоритет этого потока до...


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

Или воспользуйтесь поиском по форуму:
StailGot
28 / 23 / 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     [Поток] Один вход, два выхода [Как сделать?]
Ответ Создать тему
Опции темы

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