Ravi Inampudi-2 wrote:
> 
> There is no template for "omanip" in C++ standard library.
> 

I'm pretty sure that omanip was something from the old iostreams
implementation. It is not in the standard.


Ravi Inampudi-2 wrote:
> 
> What are the options for people migrating to C++ standard library?
> 

The option is to write out the code explicitly. The model would be something
like this...

    #include <iostream>

    template <class CharT>
    struct repeat_n_impl {
      repeat_n_impl (CharT c, size_t n)
        : c_ (c), n_ (n)
      {
      }

      CharT c_;
      size_t n_;
    };

    template <class CharT, class TraitsT>
    std::basic_ostream<CharT, TraitsT>& operator<< (
        std::basic_ostream<CharT, TraitsT>& os,
        const repeat_n_impl<CharT>& rep)
    {
      for (size_t n = 0; n < rep.n_; ++n)
          os << rep.c_;
      return os;
    }

    template <class CharT>
    repeat_n_impl<CharT> repeat_n (CharT c, size_t n) {
      return repeat_n_impl<CharT>(c, n);
    }

    int main ()
    {
        std::cout << repeat_n ('a', 100) << std::endl;
        return 0;
    }

Another option would be to implement something like the old omanip template.
Unfortunately I only think that omanip worked for one additional parameter,
so it wouldn't work with the above example. I believe that the following is
similar...

    template <class T>
    struct omanip
    {
        typedef std::ostream& (*omanip_function)(std::ostream&, T);

        omanip (omanip_function fn, T val)
            : fn_ (fn), val_ (val)
        {
        }

        friend std::ostream& operator<< (std::ostream& os, const omanip& om)
        {
            return om.fn_ (os, om.val_);
        }

        omanip_function fn_;
        T val_;
    };

Travis
-- 
View this message in context: 
http://www.nabble.com/%22omanip%22-in-C%2B%2B-standard-library-tp15194916p15195203.html
Sent from the stdcxx-dev mailing list archive at Nabble.com.

Reply via email to