2014-11-03 3 views
4

Представьте, что std::ostream& operator<< хочет сделать что-то с цифрами. Для этой цели кто-то может захотеть использовать std::hex, другие могут захотеть использовать ничего, независимо от того, какой манипулятор возможен.C++ копировать манипулятор потока в другой поток

Как я могу скопировать их в другой std::ostream без текстового содержимого ostream, переданного в качестве аргумента? Мне нужны манипуляторы только.

Так что я хочу, чтобы std::cout << std::hex << someCoolClass(10), где someCoolClass может выглядеть

struct someCoolClass 
{ 
    someCoolClass(int i) : _i(i) 
    {} 

    friend std::ostream& operator<<(std::ostream& os, const someCoolClass& rhs) 
    { 
     std::stringstream ss; 
     //magically copy manipulators of os 
     ss << _i; 
     return os << ss.str(); 
    } 
private: 
    int _i; 
}; 

отпечатков a. Я знаю, что этот пример бесполезен, и особенно другой поток, чтобы преобразовать целое число в строку, кажется бесполезным, но представьте себе, что это не бесполезно, а не чисто бессмысленно.

Спасибо.

ответ

7

ios::copyfmt

friend std::ostream& operator<<(std::ostream& os, const someCoolClass& rhs) 
{ 
    std::stringstream ss; 
    ss.copyfmt(os);  // <- copy formatting 
    ss << rhs._i; 
    return os << ss.str(); 
} 

DEMO

Смежные вопросы