⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sample_advanced.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
字号:
// ----------------------------------------------------------------------------// sample_advanced.cc :  examples of adanced usage of format // ----------------------------------------------------------------------------//  Copyright Samuel Krempp 2003. Use, modification, and distribution are//  subject to the Boost Software License, Version 1.0. (See accompanying//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//  See http://www.boost.org/libs/format for library home page// ----------------------------------------------------------------------------#include <iostream>#include <iomanip>#include "boost/format.hpp"namespace MyNS_ForOutput {  using std::cout; using std::cerr;  using std::string;  using std::endl; using std::flush;  using boost::format;  using boost::io::group;}namespace MyNS_Manips {  using std::setfill;  using std::setw;  using std::hex ;  using std::dec ;  using std::showbase ;  using std::left ;  using std::right ;  using std::internal ;}int main(){    using namespace MyNS_ForOutput;    using namespace MyNS_Manips;    std::string s;    //------------------------------------------------------------------------    // storing the parsed format-string in a 'formatter' :     // format objects are regular objects that can be copied, assigned,     // fed arguments, dumped to a stream, re-fed arguments, etc...     // So users can use them the way they like.    format fmter("%1% %2% %3% %1% \n");    fmter % 10 % 20 % 30;     cout  << fmter;    //          prints  "10 20 30 10 \n"        // note that once the fmter got all its arguments,     // the formatted string stays available  (until next call to '%')    //    The result is  available via function str() or stream's << :    cout << fmter;     //          prints the same string again.    // once you call operator% again, arguments are cleared inside the object    // and it is an error to ask for the conversion string before feeding all arguments :    fmter % 1001;    try  { cout << fmter;   }    catch (boost::io::too_few_args& exc) {       cout <<  exc.what() << "***Dont worry, that was planned\n";    }    // we just need to feed the last two arguments, and it will be ready for output again :    cout << fmter % 1002 % 1003;    //          prints  "1001 1002 1003 1001 \n"    cout  << fmter % 10 % 1 % 2;    //          prints  "10 1 2 10 \n"    //---------------------------------------------------------------    // using format objects     // modify the formatting options for a given directive :    fmter = format("%1% %2% %3% %2% %1% \n");    fmter.modify_item(4, group(setfill('_'), hex, showbase, setw(5)) );    cout << fmter % 1 % 2 % 3;    //          prints  "1 2 3 __0x2 1 \n"        // bind one of the argumets :    fmter.bind_arg(1, 18);    cout << fmter % group(hex, showbase, 20) % 30;  // %2 is 20, and 20 == 0x14    //          prints  "18 0x14 30  _0x14 18 \n"            fmter.modify_item(4, setw(0)); // cancels previous width-5    fmter.bind_arg(1, 77); // replace 18 with 77 for first argument.    cout << fmter % 10 % 20;    //          prints  "77 10 20 0xa 77 \n"    try      {       cout << fmter % 6 % 7 % 8;   // Aye ! too many args, because arg1 is bound already    }    catch (boost::io::too_many_args& exc)     {       cout <<  exc.what() << "***Dont worry, that was planned\n";    }    // clear regular arguments, but not bound arguments :    fmter.clear();    cout << fmter % 2 % 3;    //          prints "77 2 3 0x2 77 \n"    // clear_binds() clears both regular AND bound arguments :    fmter.clear_binds();     cout << fmter % 1 % 2 % 3;    //          prints  "1 2 3 0x2 1 \n"         // setting desired exceptions :    fmter.exceptions( boost::io::all_error_bits ^( boost::io::too_many_args_bit ) );    cout << fmter % 1 % 2 % 3 % 4 % 5 % 6 ;   // -----------------------------------------------------------    // misc:    // unsupported printf directives %n and asterisk-fields are purely ignored.    // do *NOT* provide an argument for them, it is an error.    cout << format("|%5d| %n") % 7 << endl;    //          prints  "|    7| "    cout << format("|%*.*d|")  % 7 << endl;    //          prints "|7|"    // truncations of strings :    cout << format("%|.2s| %|8c|.\n") % "root" % "user";    //          prints  "ro        u.\n"    // manipulators conflicting with format-string : manipulators win.    cout << format("%2s")  % group(setfill('0'), setw(6), 1) << endl;    //          prints  "000001"    cout << format("%2$5s %1% %2$3s\n")  % 1    % group(setfill('X'), setw(4), 2) ;    //          prints  "XXX2 1 XXX2\n"      //          width is 4, as set by manip, not the format-string.        // nesting :    cout << format("%2$014x [%1%] %2$05s\n") % (format("%05s / %s") % -18 % 7)                                             % group(showbase, -100);    //          prints   "0x0000ffffff9c [-0018 / 7] -0100\n"    cout << "\n\nEverything went OK, exiting. \n";    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -