@tvsjke
информация засекречена

Функция вывода на консоль/в файл с++?

Как можно максимально красиво написать функцию, которая в зависимости от параметра(string*) пишет мсдж либо в консоль, либо в файл ?
Пока ничего лучше чем

if(fileName)
{
     ofstream file(*fileName);
     streambuf *x = cout.rdbuf(file.rdbuf( ));
     cout << *_msg << endl;  
} 
cout << *_msg << endl;


не придумал.

Нужно что-то типа

#if 1
     ostream &out = std::cout;
#else
     ofstream out(*fileName);
#endif

out << *_msg;


только без условной компиляции
  • Вопрос задан
  • 2819 просмотров
Пригласить эксперта
Ответы на вопрос 4
ErmIg
@ErmIg
Программист
Как еще один вариант - можно просто перенаправить вывод в файл.
#include <iostream>
int main()
{
    std::out<< "Hello world!" << std::endl;
}

Вызов приложения с выводом в консоль:
Test.exe

Вызов приложения с выводом в файл:
Test.exe>Log.txt
Ответ написан
Комментировать
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Чтобы не изобретать костыли, расскажите подробно, что вы хотите сделать.
можно например делать так
ostream& print(ostream& out)
{
   out<< "FFFFUUUUU\n";
   return(out);
}

и вызывать так

print(cout);
или
ofstream fout;
...
print(fout);
Ответ написан
Комментировать
maaGames
@maaGames
Погроммирую программы
ostream *out=NULL;
bool needToDelete = false;

if( 1 )
  out = &std::cout;
else
{
   out = new ofstream(*fileName);
   needToDelete = true;
}

*out << "msg";

...

if( needToDelete )
    delete out;


Но перенаправить вывод будет более красивым решением.
Ответ написан
Комментировать
donkaban
@donkaban
Умею рисовать тени
Когда наиграетесь с собственными логерами - www.boost.org/doc/libs/1_57_0/libs/log/doc/html/in...

И это... используйте тег code, пожалуйста (это такие три точечки в редакторе сообщений) - всем будет удобнее читать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы