Dodawanie stałego stringa na początek każdej linii w terminalu

0

No właśnie - jak to zrobić? Chcę, żeby na początku każdej linii w terminalu mój program wypisywał jakiś string. Ma być to zintegrowane z wejściem, jak i wyjściem programu.

Use case:
piszę prosty czat. Kod po stronie clienta wygląda na razie tak:
http://pastebin.com/aEC7Cwhs
terminal ma wyglądać w ten sposób:
#> /start nazwa_pokoju #> server: successful! #> /join nazwa pokoju #> server: successful! #> /nick blabla #> server: successful! #> no elo #> blabla2: witam serdecznie

EDIT: poradziłem sobie z tą konkretną sytuacją. Zastanawiam się jednak, czy są jakies biblioteki, które robią coś takiego. Tym bardziej, że drobna modyfikacja programu => muszę zmienić całą technikę dodawania tego #> .

1

To nie jest wybitny temat, może wystarczą jakieś policy based i/o dekoratory?
Albo coś takiego:

#include <iostream>
#include <string>
#include <functional>
#include <tuple>
#include <type_traits>
using namespace std;

namespace decorated_io{
	namespace detail{
		ostream &output(const string &str, ostream &out){
			return out << str;
		}
		istream &input(const string &str, ostream &out, istream &in){
			out << str;
			return in;
		}
	}
	
	namespace create{
		auto output(const string &str, ostream &out){
			return std::bind(decorated_io::detail::output, cref(str), ref(out));
		}
        auto input(const string &str, ostream &out, istream &in){
            return std::bind(decorated_io::detail::input, cref(str), ref(out), ref(in));
        }
        
        auto input_and_output(const string &str, ostream &out, istream &in){
            return make_tuple(input(str, out, in), output(str, out));
        }
        auto input_and_output(const string &out_str, const string &in_str, ostream &out, istream &in){
            return make_tuple(input(in_str, out, in), output(out_str, out));
        }
	}
    namespace get{
        template<typename io_type>
        auto input(io_type &io){
            return std::get<0>(io);
        }
        template<typename io_type>
        auto output(io_type &io){
            return std::get<1>(io);
        }
    }
}

int main() {
    auto io = decorated_io::create::input_and_output("#>", ">>", cout, cin);
    auto input = decorated_io::get::input(io);
    auto output = decorated_io::get::output(io);
    
    output() << "hjuston, jak mnie slyszysz? #kszt" << endl;
    
    string in;
    getline(input(), in);
    output() << in;
    
	return 0;
}
2

logger

0

To ma sens. Dzięki, Panowie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1