Using * Width & Precision Specifiers With boost::format

前端 未结 2 801
感动是毒
感动是毒 2020-12-18 06:51

I am trying to use width and precision specifiers with boost::format, like this:

#include 
#include 

int         


        
相关标签:
2条回答
  • Try this:

    #include <boost/format.hpp>
    #include <iomanip>
    
    using namespace std;
    using namespace boost;
    
    int main()
    {
        int n = 5;
        string s = (format("%s") % io::group(setw(n*2), setprecision(n*2), "Hello")).str();
        return 0;
    }
    

    group() lets you encapsulate one or more io manipulators with a parameter.

    0 讨论(0)
  • 2020-12-18 07:17

    Well, this isn't a drop-in, but one way to do it would be to construct the format string dynamically:

    #include <boost/format.hpp>
    #include <boost/lexical_cast.hpp>
    
    int main()
    {
        int n = 5;
        const std::string f("%" + 
                            boost::lexical_cast<std::string>(n * 2) + "." +
                            boost::lexical_cast<std::string>(n * 2) + "s");
        std::string s = (boost::format(f) % "Hello").str();
    }
    

    Of course, if you did this frequently, you could refactor construction of the format string into a function.

    You could also use boost::format() to generate the format string; it's shorter, but potentially less readable, especially for long format strings:

    const std::string f = (boost::format("%%%d.%ds") % (n*2) % (n*2)).str();
    std::string s = (boost::format(f) % "Hello").str();
    

    (credit to Ferruccio for posting the second idea in the comments)

    0 讨论(0)
提交回复
热议问题