// ----------------------------------------------------------------------------// sample_formats.cpp : example of basic 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 <cassert>#include "boost/format.hpp"// 2 custom namespaces, to bring in a few useful names :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 ;// gcc-2.95 doesnt define the next ones// using std::showbase ;// using std::left ;// using std::right ;// using std::internal ;}int main(){using namespace MyNS_ForOutput;using namespace MyNS_Manips;std::cout << format("%|11ドル| %|23ドル|") % "Hello" % 3 << std::endl;// Reordering :cout << format("%1% %2% %3% %2% %1% \n") % "o" % "oo" % "O"; // 'simple' style.// prints "o oo O oo o \n"cout << format("(x,y) = (%1$+5d,%2$+5d) \n") % -23 % 35; // Posix-Printf style// No reordering :cout << format("writing %s, x=%s : %d-th step \n") % "toto" % 40.23 % 50;// prints "writing toto, x=40.23 : 50-th step \n"cout << format("(x,y) = (%+5d,%+5d) \n") % -23 % 35;cout << format("(x,y) = (%|+5|,%|+5|) \n") % -23 % 35;cout << format("(x,y) = (%|1$+5|,%|2$+5|) \n") % -23 % 35;// all those are the same, it prints "(x,y) = ( -23, +35) \n"// Using manipulators, via 'group' :cout << format("%2% %1% %2%\n") % 1 % group(setfill('X'), hex, setw(4), 16+3) ;// prints "XX13 1 XX13\n"// printf directives's type-flag can be used to pass formatting options :cout << format("_%14ドルd_ is : _%1$#4x_, _%1$#4o_, and _%1$s_ by default\n") % 18;// prints "_ 18_ is : _0x12_, _ 022_, and _18_ by default\n"// Taking the string value :std::string s;s= str( format(" %d %d ") % 11 % 22 );assert( s == " 11 22 ");// -----------------------------------------------// %% prints '%'cout << format("%%##%#x ") % 20 << endl;// prints "%##0x14 "// -----------------------------------------------// Enforcing the right number of arguments// Too much arguments will throw an exception when feeding the unwanted argument :try {format(" %1% %1% ") % 101 % 102;// the format-string refers to ONE argument, twice. not 2 arguments.// thus giving 2 arguments is an error}catch (boost::io::too_many_args& exc) {cerr << exc.what() << "\n\t\t***Dont worry, that was planned\n";}// Too few arguments when requesting the result will also throw an exception :try {cerr << format(" %|3$| ") % 101;// even if %1$ and %2$ are not used, you should have given 3 arguments}catch (boost::io::too_few_args& exc) {cerr << exc.what() << "\n\t\t***Dont worry, that was planned\n";}cerr << "\n\nEverything went OK, exiting. \n";return 0;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。