Setting width in C++ output stream

后端 未结 3 769
情深已故
情深已故 2020-12-05 11:02

I\'m trying to create a neatly formatted table on C++ by setting the width of the different fields. I can use setw(n), doing something like

cout << set         


        
3条回答
  •  独厮守ぢ
    2020-12-05 11:45

    You can create an object that overloads operator<< and contains an iostream object that will automatically call setw internally. For instance:

    class formatted_output
    {
        private:
            int width;
            ostream& stream_obj;
    
        public:
            formatted_output(ostream& obj, int w): width(w), stream_obj(obj) {}
    
            template
            formatted_output& operator<<(const T& output)
            {
                stream_obj << setw(width) << output;
    
                return *this;
            }
    
            formatted_output& operator<<(ostream& (*func)(ostream&))
            {
                func(stream_obj);
                return *this;
            }
    };
    

    You can now call it like the following:

    formatted_output field_output(cout, 10);
    field_output << x << y << endl;
    

提交回复
热议问题