{"id":113,"date":"2007-09-12T15:46:31","date_gmt":"2007-09-12T15:46:31","guid":{"rendered":"http:\/\/newblog.mix1009.net\/?p=113"},"modified":"2007-09-12T15:46:31","modified_gmt":"2007-09-12T15:46:31","slug":"boostformat","status":"publish","type":"post","link":"https:\/\/mix1009.net\/?p=113","title":{"rendered":"boost::format"},"content":{"rendered":"<p>\uc774\ubc88\uc5d0 \ud504\ub85c\uadf8\ub7a8\uc744 \uc911\uad6d\uc5b4\ub85c \ud3ec\ud305\ud558\uba74\uc11c \uc8fd\ub294 \ubc84\uadf8\uac00 \uc0dd\uacbc\ub294\ub370 \uc774 \ubc84\uadf8 \uc7a1\ub290\ub77c \ub9ce\uc774 \uc0bd\uc9c8\ud588\uc2b5\ub2c8\ub2e4. XP\uc5d0\uc11c \uc8fd\uc744 \ub54c \ubcf4\uba74 \ubaa8\ub450 MFC \ucabd \uc2a4\ud0dd\ub9cc \ud45c\uc2dc\ub418\uc11c UI \ucabd\uc774\ub77c\ub294 \uc758\uc2ec\uc740 \ud588\uc5c8\ub294\ub370 \ub3c4\uc800\ud788 \uc5b4\ub518\uc9c0\ub294 \ubabb\ucc3e\uaca0\ub354\uad70\uc694. \ubc14\uafbc\uac70\ub3c4 \ubcc4\ub85c \uc5c6\ub294\ub370, \uc774\uc0c1\ud558\uac8c \ub85c\uadf8\uc778\ub9cc \ud558\uba74 \uc8fd\ub294\uac81\ub2c8\ub2e4 TT<\/p>\n<p>Windows 2000\uc5d0\uc11c \ub514\ubc84\uae45\ud558\uba74 \ubb54\uac00 \ub098\ud0c0\ub0a0\uc904 \uc54c\uc558\ub294\ub370 \uc2a4\ud0dd\uc774 \ub611\uac19\ub354\uad70\uc694 &#8211;;<\/p>\n<p>\uc544\uc8fc \uc6b0\uc5f0\ud788 \ubc84\uadf8\ub97c \ubc1c\uacac\ud588\ub294\ub370&#8230;. \ubc84\uadf8\ub294<\/p>\n<p>[CODE type=C]CString x;<br \/>\nstring val = &#8220;haha&#8221;;<br \/>\nx.Format(&#8220;%s&#8221;, val);[\/HTML][\/CODE]<\/p>\n<p>\uc774\ub7f0 \uac70 \uc600\uc2b5\ub2c8\ub2e4. \ubb50 \uc704\uc5d0 \ucf54\ub4dc\uac00 \uc2e4\ud589\ub420\ub54c \ubc14\ub85c \uc8fd\ub294\uac70\ub3c4 \uc544\ub2c8\uace0, \uba87\ubc88 \uc2e4\ud589\ub418\ub2e4 \ubcf4\uba74 \uc774\uc0c1\ud574\uc9c0\ub294\uac70\uc8e0. printf\ub098 Format \uc790\uccb4\uac00 \ub4a4\uc5d0 \uc624\ub294 \uc778\uc790\ub97c \ucef4\ud30c\uc77c\ub7ec\uc5d0\uc11c \uccb4\ud06c\ud560 \ubc29\ubc95\uc774 \uc5c6\uae30 \ub54c\ubb38\uc5d0 \uc774\ub7f0 \uc624\ub958\ub294 \ucef4\ud30c\uc77c\ub7ec\uc5d0\uc11c \uc6cc\ub2dd\ub3c4 \ud45c\uc2dc\uc548\ud574\uc90d\ub2c8\ub2e4. \ub2e4\ub9cc gcc\uc5d0\uc11c\ub294 printf \ub4f1\uc758 ANSI \ud568\uc218\uc5d0 \ub300\ud574\uc11c\ub294 \uacbd\uace0 \ud45c\uc2dc\ub294 \ud574\uc8fc\uc8e0.<\/p>\n<p>\ud558\uc5ec\uac04 \uc544\uc8fc \uac04\ub2e8\ud55c \uc2e4\uc218 \ud558\ub098\ub85c \uc815\ub9d0 \uc5b4\uc758\uc5c6\uac8c \ub514\ubc84\uae45\ud574\ub3c4 \uac70\uc758 \ucc3e\uc744 \uc218 \uc5c6\ub294 \uc218\uc900\uc758 \ubc84\uadf8\uac00 \ub9cc\ub4e4\uc5b4\uc9c0\ub124\uc694.<\/p>\n<p>\uc18c\uc2a4\uc5d0\uc11c \ud55c\uae00\ub85c \ub418\uc5b4 \uc788\ub294 \ubd80\ubd84\uc744 \ubb38\uc790\uc5f4 \ub9ac\uc18c\uc2a4\ub85c \ube7c\ub294 \uc791\uc5c5\uc778\ub370, \uc774\ub97c \uc704\ud574\uc11c GS() \ud568\uc218\uc640 GSTR() \ud568\uc218\ub97c \ub9cc\ub4e4\uc5c8\uc2b5\ub2c8\ub2e4. GS\ub294 STL string\uc744 \ub9ac\ud134\ud558\uace0, GSTR\uc740 C string\uc744 \ub9ac\ud134\ud558\ub3c4\ub85d \uc815\uc758\ud588\uc2b5\ub2c8\ub2e4. \ubb38\uc790\uc5f4 \ub9ac\uc18c\uc2a4 \ube7c\uace0\ub098\ub2c8 300\uac1c \uc815\ub3c4 \ub418\ub294\ub370 \uadf8\uc911\uc5d0 \ud558\ub098 \uc2e4\uc218\ud55c\uac70\uc8e0.<\/p>\n<p>[CODE type=C]extern CLanguage *gLanguage;<\/p>\n<p>#define GSTR(x) gLanguage-&gt;GetString(x).c_str()<br \/>\n#define GS(x) gLanguage-&gt;GetString(x)[\/HTML][\/CODE]<\/p>\n<p>\n\uc774\ub7f0 \uc624\ub958\ub294 \uc5b8\uc81c\ub4e0\uc9c0 \ub2e4\uc2dc \ubc1c\uc0dd\ud560\uc218 \uc788\ub2e4\ub294 \uc0dd\uac01\uc5d0 \uad6c\uae00\uc5d0\uc11c &#8220;type safe format&#8221;\uc73c\ub85c \uac80\uc0c9\ud574\ubcf4\ub2c8, boost\uc5d0 format \ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 \uc788\ub354\uad70\uc694. \uc608\uc804\uc5d0 \uc11c\ube0c\ubc84\uc804\uc5d0 \ub4f1\ub85d\ud55c boost \ubc84\uc804\uc5d0\uc11c\ub294 \uc5c6\uc5c8\ub358\uac70 \uac19\uc740\ub370&#8230; \ud558\uc5ec\uac04 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c boost 1.34.1\ub85c \uc5c5\ub370\uc774\ud2b8\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p>boost\ub294 \uae30\ubcf8\uc801\uc73c\ub85c header \ud30c\uc77c\ub85c\ub9cc \uad6c\uc131\ub41c template \ub77c\uc774\ube0c\ub7ec\ub9ac\ub85c \ub530\ub85c \ucef4\ud30c\uc77c\uc744 \ud560 \ud544\uc694\uc5c6\uace0, \uba87\uac00\uc9c0 \uae30\ub2a5(\uc608: regex, python, thread)\uc774 \ud544\uc694\ud558\uba74 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ucef4\ud30c\uc77c\ud574\uc57c\ud569\ub2c8\ub2e4. \uae30\ubcf8\uc801\uc778 \uae30\ub2a5\uc740 \uac70\uc758 \ud5e4\ub354 \ud30c\uc77c\ub85c\ub9cc \uad6c\ud604\ub418\uc5b4 \uc788\uc5b4\uc11c \ub77c\uc774\ube0c\ub7ec\ub9ac \ucef4\ud30c\uc77c\uc740 \ud558\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.<\/p>\n<p>boost::format\uc740 CString::Format\uc774\ub098 printf\uc640 \uc57d\uac04 \uc0ac\uc6a9\ubc95\uc774 \ud2c0\ub9bd\ub2c8\ub2e4. Format \ub4f1\uc740 \ub5a8\uac70\uc9c0 \uc778\uc790\ub4e4\uc744 \ud568\uc218 \uc778\uc790\ub85c \ucb48\ub8e8\ub8e8 \uc804\ub2ec\ud558\ub294\ub370, \uc774\ub807\uac8c \uc804\ub2ec\ud558\uba74 \ucef4\ud30c\uc77c\ub7ec\uc5d0\uc11c type checking\uc744 \ud560\uc218 \uc5c6\uae30 \ub54c\ubb38\uc5d0 \ubb38\ubc95\uc774 \uc57d\uac04 \ub2ec\ub77c\uc84c\uc2b5\ub2c8\ub2e4. \ucc98\uc74c\uc5d0\ub294 \uc0dd\uc18c\ud558\uc9c0\ub9cc, \uc870\uae08\ub9cc \uc775\uc219\ud574\uc9c0\uba74 \ubd88\ud3b8\ud558\uc9c0 \uc54a\uac8c \uc0ac\uc6a9\ud560\uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>[CODE type=C]#include &lt;boost\/format.hpp&gt;<\/p>\n<p>void test_format()<br \/>\n{<br \/>\n &nbsp;&nbsp; string str1 = (boost::format(&#8220;%02d:%s&#8221;) % 30 % &#8220;hello&#8221;).str();<br \/>\n &nbsp;&nbsp; CString str2;<br \/>\n &nbsp;&nbsp; str2.Format(&#8220;%02d:%s&#8221;, 30, &#8220;hello&#8221;);<br \/>\n &nbsp;&nbsp; CString str3 = str1.c_str();<br \/>\n}[\/HTML][\/CODE]<\/p>\n<p>\uc77c\ub2e8, \uc778\uc790\ub97c \uc798\ubabb \uc804\ub2ec\ud55c\ub2e4\ub358\uac00 \ud574\uc11c \ud14c\uc2a4\ud2b8\ud574\ubd24\ub294\ub370 \uc8fd\ub294 \uacbd\uc6b0\ub294 \uc5c6\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc778\uc790\ub97c \uc798\ubabb \uc804\ub2ec\ud558\ub354\ub77c\ub3c4 \ucef4\ud30c\uc77c\ub7ec\uc5d0\uc11c\ub294 \uacbd\uace0\ub098 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. (VC 6.0 \uc774\ub77c \uadf8\ub7f0\uc9c0\ub3c4 \ubaa8\ub974\uaca0\uc2b5\ub2c8\ub2e4.)<\/p>\n<p>\uc81c\uc77c \ud070 \ucc28\uc774\uc810\uc740 \uc778\uc790\ub4e4\uc744 \uc778\uc790\ub85c \ub118\uae30\ub294 \uac83\uc774 \uc544\ub2c8\ub77c % \ub85c stream \ud615\ud0dc\ub85c \ub118\uae30\ub294 \uac83\uc785\ub2c8\ub2e4.<br \/>\nboost::format(&#8220;&#8230;&#8221;)\uc73c\ub85c \uac1c\uccb4\uac00 \ub9cc\ub4e4\uc5b4\uc9c0\uace0 \uac1c\uccb4\uc5d0 % \ud568\uc218\ub85c \ud558\ub098\uc529 \uc778\uc790\ub97c \ub118\uae30\ub294 \uac70\uc8e0. format\uc758 \uc778\uc790(%d %s&#8230; \ub4f1\ub4f1\ub4f1)\ub294 printf\ub098 Format\uacfc \ucc28\uc774\uac00 \uac70\uc758 \uc5c6\uace0, \uadf8\ub300\ub85c \uc0ac\uc6a9\ud558\uba74 \ub418\uace0, \uba87\uac00\uc9c0 \ucd94\uac00 \uae30\ub2a5\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc55e\uc5d0 format\uc758 \ud0c0\uc785\uacfc \ub4a4\uc5d0 %\ub85c \uc804\ub2ec\ub418\ub294 \uc778\uc790\uac00 \ud2c0\ub824\ub3c4 \uc54c\uc544\uc11c \uc798(?) \ud45c\uc2dc \ud574\uc90d\ub2c8\ub2e4. \ub0b4\ubd80\uc801\uc73c\ub85c C++ stream (&lt;&lt;)\uc744 \uc774\uc6a9\ud574\uc11c \ubcc0\ud658\ud558\uae30 \ub54c\ubb38\uc5d0 type\uc774 \uc548\ub9de\uc544\ub3c4 \uadf8\ub0e5 \ub3d9\uc791\ud558\ub294\uac70 \uac19\ub124\uc694. %03d \ub4f1\uc740 C++ stream manipulator \ub4f1\uc744 \uc774\uc6a9\ud560\ub4ef \ud558\ub124\uc694. \uadf8\ub798\uc11c manipulator\ub85c \uc2a4\ud2b8\ub9bc \uc18d\uc131\uc744 \ubc14\uafb8\ub294 \uac70\uae30 \ub54c\ubb38\uc5d0, \uc22b\uc790 \uc804\ub2ec\ud558\ub294\uacf3\uc5d0 \ubb38\uc790\uc5f4\uc744 \uc804\ub2ec\ud574\ub3c4 \ubb38\uc81c\uac00 \ub418\uc9c0 \uc54a\ub294\ub4ef\ud569\ub2c8\ub2e4. stream manipulator\ub294 C++ \ucc45\uc774\ub098 <a href=\"http:\/\/www.deitel.com\/articles\/cplusplus_tutorials\/20060218\/index.html\">http:\/\/www.deitel.com\/articles\/cplusplus_tutorials\/20060218\/index.html<\/a> \ub97c \ucc38\uace0\ud558\uc138\uc694<br \/>\n.<\/p>\n<p>\uc2dc\ud5d8 \uc0bc\uc544 CString\uc744 \uc9c1\uc811 \uc804\ub2ec\ud574\ubd24\uc2b5\ub2c8\ub2e4. \uc8fd\uc9c0\ub294 \uc54a\uace0, \ud3ec\uc778\ud130 \uac12\uc744 \ucd9c\ub825\ud558\ub124\uc694.<\/p>\n<p>CString \ub118\uae38\ub54c\ub9c8\ub2e4 GetBuffer(0) \ud638\ucd9c\ud558\uae30\ub294 \uadc0\ucc2e\uc73c\ub2c8 operator &lt;&lt;\ub97c \ub9cc\ub4e4\uc5b4\uc8fc\uba74 CString\uc744 \uc9c1\uc811 \ub118\uaca8\ub3c4 \ub429\ub2c8\ub2e4.<\/p>\n<p>[CODE type=C]std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const CString &amp;x);[\/HTML][\/CODE]<\/p>\n<p>\uad6c\ud604\uc740 \uc26c\uc6b8\uac70 \uac19\uc558\ub294\ub370, casting \ub54c\ubb38\uc5d0 \uc880 \ud5e4\ub9f8\uc2b5\ub2c8\ub2e4.<\/p>\n<p>[CODE type=C]std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const CString &amp;x)<br \/>\n{ <br \/>\n &nbsp;&nbsp; os &lt;&lt; const_cast&lt;CString&amp;&gt;(x).GetBuffer(0);<br \/>\n &nbsp;&nbsp; return os; <br \/>\n}[\/HTML][\/CODE]<\/p>\n<p>\uc774\ub807\uac8c \ud558\uba74 boost::format\uc5d0 \uc9c1\uc811 CString\uc744 \ub118\uaca8\ub3c4 \ubb38\uc790\uc5f4\uc774 \uc798 \ucd9c\ub825\ub429\ub2c8\ub2e4.<\/p>\n<p>\uc0ac\uc6a9\ud558\uae30 \ud3b8\ub9ac\ud558\ub3c4\ub85d stdafx.h\uc5d0 \ub2e4\uc74c \ub77c\uc778\ub4e4\uc744 \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p>[CODE type=C]std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const CString &amp;x);<br \/>\n#define FORMAT_STRING(fmt, args) (boost::format(fmt) % args).str()<br \/>\n#define FORMAT_CSTRING(fmt, args) (FORMAT_STRING(fmt, args).c_str())<br \/>\n[\/HTML][\/CODE]<\/p>\n<p>\uc6d0\ub798 \uc18c\uc2a4\ub97c boost::format\uc73c\ub85c \ubc14\uafb8\uae30 \uc704\ud574\uc11c\ub294 \uc77c\ub2e8 boost\/format.hpp\ub97c include \ud558\uace0<br \/>\n\uc544\ub798\ucc98\ub7fc \ubc14\uafb8\uba74 \ub429\ub2c8\ub2e4.<br \/>\n<span style=\"font-weight: bold\"><\/span><\/p>\n<div style=\"padding: 10px; background-color: rgb(228, 228, 228)\"><span style=\"color: rgb(102, 102, 153)\"> &nbsp; &nbsp; &nbsp; &nbsp;CString x;<\/span><br style=\"color: rgb(102, 102, 153)\"\/><span style=\"color: rgb(102, 102, 153)\"> &nbsp; &nbsp; &nbsp; &nbsp;x.Format(&#8220;%02d \uc2dc&#8221;, cnt);<\/span><br style=\"color: rgb(102, 102, 153)\"\/><span style=\"color: rgb(102, 102, 153)\"> &nbsp; &nbsp; &nbsp; &nbsp;m_hourCtrl.AddString(x);<\/span><br \/>\n<span style=\"font-weight: bold\"> &nbsp; &nbsp; \u2192<\/span><br \/>\n &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: rgb(0, 0, 255)\">m_hourCtrl.AddString(FORMAT_CSTRING(&#8220;%02d \uc2dc&#8221;, cnt));<\/span><\/div>\n<p><span style=\"font-weight: bold\"><\/span><\/p>\n<div style=\"padding: 10px; background-color: rgb(228, 228, 228)\"><span style=\"color: rgb(102, 102, 153)\"> &nbsp; &nbsp; &nbsp; &nbsp;SendRequestFormat(&#8220;user %s|%s&#8221;, userid.c_str(), version.c_str());<\/span><br \/>\n<span style=\"font-weight: bold\"> &nbsp; &nbsp; \u2192<\/span><br \/>\n &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: rgb(0, 0, 255)\">SendRequest(FORMAT_STRING(&#8220;user %s|%s&#8221;, m_userid % version));<br \/>\n<\/span><\/div>\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc774\ubc88\uc5d0 \ud504\ub85c\uadf8\ub7a8\uc744 \uc911\uad6d\uc5b4\ub85c \ud3ec\ud305\ud558\uba74\uc11c \uc8fd\ub294 \ubc84\uadf8\uac00 \uc0dd\uacbc\ub294\ub370 \uc774 \ubc84\uadf8 \uc7a1\ub290\ub77c \ub9ce\uc774 \uc0bd\uc9c8\ud588\uc2b5\ub2c8\ub2e4. XP\uc5d0\uc11c \uc8fd\uc744 \ub54c \ubcf4\uba74 \ubaa8\ub450 MFC \ucabd \uc2a4\ud0dd\ub9cc \ud45c\uc2dc\ub418\uc11c UI \ucabd\uc774\ub77c\ub294 \uc758\uc2ec\uc740 \ud588\uc5c8\ub294\ub370 \ub3c4\uc800\ud788 \uc5b4\ub518\uc9c0\ub294 \ubabb\ucc3e\uaca0\ub354\uad70\uc694. \ubc14\uafbc\uac70\ub3c4 \ubcc4\ub85c \uc5c6\ub294\ub370, \uc774\uc0c1\ud558\uac8c \ub85c\uadf8\uc778\ub9cc \ud558\uba74 \uc8fd\ub294\uac81\ub2c8\ub2e4 TT Windows 2000\uc5d0\uc11c \ub514\ubc84\uae45\ud558\uba74 \ubb54\uac00 \ub098\ud0c0\ub0a0\uc904 \uc54c\uc558\ub294\ub370 \uc2a4\ud0dd\uc774 \ub611\uac19\ub354\uad70\uc694 &#8211;; \uc544\uc8fc \uc6b0\uc5f0\ud788 \ubc84\uadf8\ub97c \ubc1c\uacac\ud588\ub294\ub370&#8230;. \ubc84\uadf8\ub294 [CODE type=C]CString x; string val [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[19],"tags":[104,105],"_links":{"self":[{"href":"https:\/\/mix1009.net\/index.php?rest_route=\/wp\/v2\/posts\/113"}],"collection":[{"href":"https:\/\/mix1009.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mix1009.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mix1009.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mix1009.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=113"}],"version-history":[{"count":0,"href":"https:\/\/mix1009.net\/index.php?rest_route=\/wp\/v2\/posts\/113\/revisions"}],"wp:attachment":[{"href":"https:\/\/mix1009.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=113"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mix1009.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=113"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mix1009.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=113"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}