ページへ戻る

− Links

 印刷 

技術系備忘録​/C++​/Boost​/boost.formatを使った文字列フォーマット。printf系関数を置き換え のバックアップ差分(No.2) :: シンクリッジ

xpwiki:技術系備忘録/C++/Boost/boost.formatを使った文字列フォーマット。printf系関数を置き換え のバックアップ差分(No.2)

« Prev[4]  Next »[5]
1: 2018-02-12 (月) 01:13:17 takatsuka[6] ソース[7] 2: 2019-05-15 (水) 12:01:00 takatsuka[6] ソース[8]
Line 14: Line 14:
開発者の方に感謝しつつ使わせていただこうと思います。 開発者の方に感謝しつつ使わせていただこうと思います。
 +* コード [#rad4fc7a]
#prettify{{ #prettify{{
namespace String namespace String
Line 22: Line 23:
    return format.str();     return format.str();
} }
 +
 +#ifdef _MSC_VER // VisualC++ の CString 対応
 +template <class CharT,class... Tail> std::basic_string<CharT> Format(boost::basic_format<CharT> &format,CStringA& head,Tail&&... tail)
 +{
 +    return Format<CharT>( format % std::basic_string<CharT>(head), tail... );
 +}
 +template <class CharT,class... Tail> std::basic_string<CharT> Format(boost::basic_format<CharT> &format,const CStringA& head,Tail&&... tail)
 +{
 +    return Format<CharT>( format % std::basic_string<CharT>(head), tail... );
 +}
 +template <class CharT,class... Tail> std::basic_string<CharT> Format(boost::basic_format<CharT> &format,CStringW& head,Tail&&... tail)
 +{
 +    return Format<CharT>( format % std::basic_string<CharT>(head), tail... );
 +}
 +template <class CharT,class... Tail> std::basic_string<CharT> Format(boost::basic_format<CharT> &format,const CStringW& head,Tail&&... tail)
 +{
 +    return Format<CharT>( format % std::basic_string<CharT>(head), tail... );
 +}
 +#endif
template <class CharT,class Head,class... Tail> std::basic_string<CharT> Format(boost::basic_format<CharT> &format,Head&& head, Tail&&... tail) template <class CharT,class Head,class... Tail> std::basic_string<CharT> Format(boost::basic_format<CharT> &format,Head&& head, Tail&&... tail)
Line 30: Line 50:
template <class CharT,class... Args> std::basic_string<CharT> Format(const CharT *lpszFormat,Args&&... args) template <class CharT,class... Args> std::basic_string<CharT> Format(const CharT *lpszFormat,Args&&... args)
{ {
-    boost::basic_format<CharT> format(lpszFormat)+    boost::basic_format<CharT> format; 
-    format.exceptions( boost::io::no_error_bits ); // 例外を発生させない+    format.exceptions( boost::io::no_error_bits ); // 例外を発生させない 
 +    format.parse(lpszFormat);
    return Format<CharT>(format,args...);     return Format<CharT>(format,args...);
} }
Line 50: Line 71:
    const std::string s2b = "1JZ-GTE";     const std::string s2b = "1JZ-GTE";
    std::string s2c = String::Format( "%s jzx90 %s", s2a, s2b ); // s2c = "トヨタ jzx90 1JZ-GTE"  std::string をそのまま書けます。 c_str() は不要です。便利!     std::string s2c = String::Format( "%s jzx90 %s", s2a, s2b ); // s2c = "トヨタ jzx90 1JZ-GTE"  std::string をそのまま書けます。 c_str() は不要です。便利!
 +
 +    CString t0(_T("マツダ"));
 +    const CString t1(_T("13B-T"));
 +    auto tr = RLib::String::Format(_T("%s FC3S %s"),t0,t1); // tr = _T("マツダ FC3S 13B-T")  vc の CString版
 +
} }
}} }}
 +
 +* 追記履歴 [#p57d9c21]
 +- CString 対応コードを追加しました 2019/5/15
« Prev[4]  Next »[5]