2010-05-13 2 views
1

Я использую функцию, которая получает ostream, но у меня есть wostream есть способ конвертировать один в другой?Как я могу конвертировать из wostream в ostream

В частности, я хочу использовать boost :: write_graphviz, который принимает ostream, но я в настоящее время находится в < < оператор для wostream.

ответ

0

Я не верю, что вы можете конвертировать. Вам нужно будет получить ostream.

+0

Конечно, вы можете конвертировать их, используя адаптер. –

0

Если бы я был вами, я бы предпочел изменить свой подход, вместо того чтобы пытаться преобразовать wostream в ostream. Я уверен, что то, что вы хотите получить, может быть легко достигнуто без широких потоков символов.

Конечно, это зависит от конкретной цели вашего приложения, но в 9 из 10 случаев, очевидно, будет достаточно простой реализации вашей собственной процедуры конвертации или использования сторонних библиотек (например, iconv).

Update: (как доказательство того, что я говорю) код Google имеет только один результат поиска для wofstream и два - для wifstream. Разве этот факт не говорит сам за себя?

0

Если выходной график не имеет оператор wostream, то вы можете сделать это:



std::wstring convert(std::string const& s) 
{ 
    unsigned char const* tmp = reinterpret_cast<unsigned char const*>(s.data()); 

    std::wstring res = std::wstring(tmp, tmp + s.size()); 

    return res; 
} 

void f(std::wostream & out) 
{ 
    std::ostringstream gout; 
    gout << graph; // or whatever... 
    out << convert(gout.str()); 
} 

Бросок необходимо, если ваша строка может иметь любое значение выше 177. Если это может поворот в странные символы, потому что литой конструктор wstring будет превращать негативы в негативы вместо прямой бит-копии.