SlideShare a Scribd company logo
1 of 32
Download to read offline
char32_tとXpressiveと

H.23/11/05
Egtra
Boost.勉強会#6 札幌
char32_tとXpressiveと

• Egtra
  – @egtra
 – http://dev.activebasic.com/egtra/
char32_t……

• とchar16_t
  – C++11の新しいデータ型
  – typedefではない
  – UTF‐32とUTF‐16
  – 4バイトと2バイト
char32_tとchar16_t

• 新しいデータ型
  – void f(char c);
  – void f(wchar_t c);
  – void f(char16_t c);
  – void f(char32_t c);
char32_tとchar16_t

• リテラル
  – char c = 'a';
  – wchar_t c = L'a';
  – char16_t c = u'a';
  – char32_t c = U'a';
char32_tとchar16_t

• リテラル
  – char s1[] = "hoge";
  – wchar_t s2[] = L"hoge";
  – char16_t s3[] = u"hoge";
  – char32_t s4[] = U"hoge";
  – char s5[] = u8"hoge";
char32_tとchar16_t

• リテラル
  – char const* s1 = "foo";
  – wchar_t const* s2 = L"foo";
  – char16_t const* s3 = u"foo";
  – char32_t const* s4 = U"foo";
  – char const* s5 = u8"foo";
char32_tとchar16_t

• std::basic_string<>
  – std::string
  – std::wstring
  – std::u16string
  – std::u32string
char32_tとchar16_t

• どこで使える?
  – GCC 4.4/4.5
  – Clang 2.9
  – Visual C++ 2010?
char32_tとchar16_t

• Visual C++ 2010
  – typedef!!!
  – v11(次バージョン)でも変わらず

 – u""やU""やu8""も非対応
char32_tとchar16_t

• 以上
  – 君も今日からchar16/32_t使い
  – UTF‐16/32なデータのところに
    char16/32_t使おう!
char32_tとchar16_t

• 以上
  – 君も今日からchar16/32_t使い
  – 私は使っていません
    •Visual C++ 2010なので……
char32_tとchar16_t

• 以上と思った?
  – 足りないものだらけですね
char32_tとchar16_t (続)

• 入出力
  – u16streamとかu32streamとか
    ありません
  – 適当にtypedefしましょう
char32_tとchar16_t (続)

• <codecvt>
  – codecvt_utf8
   •UTF‐8とUTF‐32
 – codecvt_utf16
   •UTF‐16とUTF‐32
 – codecvt_utf8_utf16
char32_tとchar16_t (続)
• UTF‐8のファイルをchar32_tとして読む
 typedef basic_ifstream<char32_t>
   u32ifstream;
 u32ifstream ifs("hoge.txt");
 locale loc(locale(),
   new codecvt_utf8<char32_t>());
 ifs.imbue(loc);
char32_tとchar16_t (続)
• UTF‐8のファイルをchar32_tとして読む
 typedef basic_ifstream<char32_t>
   u32ifstream;
 u32ifstream ifs("hoge.txt");
 – 実はこれでいける(はず)
char32_tとchar16_t (続)

• なぜ? std::locale::classic()
  – 下を持っている
    •codecvt<char, wchar_t>
    •codecvt<char, char16_t>
    •codecvt<char, char32_t>
char32_tとchar16_t (続)

• 特殊化
 codecvt<char, char16_t>
 codecvt<char, char32_t>
 – UTF‐8とUTF‐16/32との変換
 – これで揃った?
char32_tとchar16_t (続)

• codecvtで可能な変換
  – char(マルチバイト)
     ⇄ wchar_t (C++98/03)
  – char (UTF‐8) ⇄ UTF‐16
  – char (UTF‐8) ⇄ UTF‐32
  – UTF‐16 ⇄ UTF‐32
char32_tとchar16_t (続)

• マルチバイトとUTFの変換は?


 –ない!

 – iconvなどを使いましょう
char32_tとchar16_t (続)

• wchar_tは?
  – UTF‐16/32とは限らない
     •例: ja_JP.eucJPな*BSD
char32_tとchar16_t (続)

• マルチバイトとUTFの変換は?
  – 解その2: Boost.Locale?
    •今回は説明しません
char32_tとchar16_t (続)

• std::basic_regex<>
  – charとwchar_t版しかありません
     •なのでBoost.Regex(ICU版)を
      使いましょう
char32_tとchar16_t (続)

• 以上
おまけ

• Boost.XpressiveでUTF‐32の
 文字列を使いたい
 – やっつけで対応させた
おまけ

• traitsクラスを作る
  – やっつけなので
    null_regex_traits<char32_t>
    から派生
  struct u32_traits : …… {
おまけ

• traitsクラスを作る
    struct locale_type {};
おまけ

• traitsクラスを作る
    enum char_class {
     InvalidClass = 0,
     Lu = 1,
     Ll = 1 << 1,
     ……
おまけ

• traitsクラスを作る
     NewLine = 1 << ……,
    };
    typedef boost::uint_value_t<
     NewLine>::least_t
     char_class_type;
おまけ

• traitsクラスを作る
  private:
    static std::unordered_map<
     char_type, char_class_type>
     LoadCategoryMap();
  – isctype内で使用
おまけ

• traitsクラスを作る
 namespace Property {
  boost::proto::terminal<
   boost::xpressive::detail::
   posix_charset_placeholder>::type
   const L = {{"L", false}};
 ……

More Related Content

Viewers also liked

פרסום באינסטגרם | מקאן דיגיטל
פרסום באינסטגרם | מקאן דיגיטלפרסום באינסטגרם | מקאן דיגיטל
פרסום באינסטגרם | מקאן דיגיטלMcCANN DIGITAL
 
Structurarea unei cotatii in mai multe sectiuni
Structurarea unei cotatii in mai multe sectiuniStructurarea unei cotatii in mai multe sectiuni
Structurarea unei cotatii in mai multe sectiuniOdooRomania
 
Facebook rinkodara Lietuvos elektroniniams verslams
Facebook rinkodara Lietuvos elektroniniams verslamsFacebook rinkodara Lietuvos elektroniniams verslams
Facebook rinkodara Lietuvos elektroniniams verslamsVladas Sapranavicius
 
構造化オーバーレイネットワークに適した分散双方向連結リストDDLL
構造化オーバーレイネットワークに適した分散双方向連結リストDDLL構造化オーバーレイネットワークに適した分散双方向連結リストDDLL
構造化オーバーレイネットワークに適した分散双方向連結リストDDLLKota Abe
 
EU road fatalities - age distribution
EU road fatalities - age distributionEU road fatalities - age distribution
EU road fatalities - age distributionPODIS Ltd
 
Transformation or Transition
Transformation or TransitionTransformation or Transition
Transformation or TransitionMike Pounsford
 
Buyer Persona - Key to B2B online marketing success
Buyer Persona - Key to B2B online marketing successBuyer Persona - Key to B2B online marketing success
Buyer Persona - Key to B2B online marketing successShimonBen
 
Educar valores a traves del futbol
Educar valores a traves del futbolEducar valores a traves del futbol
Educar valores a traves del futbolDiego Menino
 
The Virtual Strike: on pitches in advertising
The Virtual Strike: on pitches in advertisingThe Virtual Strike: on pitches in advertising
The Virtual Strike: on pitches in advertisingZigurds Zakis
 
شهادة جامعة دمشق
شهادة جامعة دمشقشهادة جامعة دمشق
شهادة جامعة دمشقMohammad Shammout
 
サーバ構築自動化 On aws sqaleの場合
サーバ構築自動化 On aws   sqaleの場合サーバ構築自動化 On aws   sqaleの場合
サーバ構築自動化 On aws sqaleの場合Ryo Kuroda
 
Bear gss experiences shareing
Bear gss experiences shareingBear gss experiences shareing
Bear gss experiences shareingDesBear Li
 

Viewers also liked (20)

פרסום באינסטגרם | מקאן דיגיטל
פרסום באינסטגרם | מקאן דיגיטלפרסום באינסטגרם | מקאן דיגיטל
פרסום באינסטגרם | מקאן דיגיטל
 
Structurarea unei cotatii in mai multe sectiuni
Structurarea unei cotatii in mai multe sectiuniStructurarea unei cotatii in mai multe sectiuni
Structurarea unei cotatii in mai multe sectiuni
 
Facebook rinkodara Lietuvos elektroniniams verslams
Facebook rinkodara Lietuvos elektroniniams verslamsFacebook rinkodara Lietuvos elektroniniams verslams
Facebook rinkodara Lietuvos elektroniniams verslams
 
構造化オーバーレイネットワークに適した分散双方向連結リストDDLL
構造化オーバーレイネットワークに適した分散双方向連結リストDDLL構造化オーバーレイネットワークに適した分散双方向連結リストDDLL
構造化オーバーレイネットワークに適した分散双方向連結リストDDLL
 
EL BOSQUE ENCANTADO
EL BOSQUE ENCANTADOEL BOSQUE ENCANTADO
EL BOSQUE ENCANTADO
 
resumeh aali1
resumeh aali1resumeh aali1
resumeh aali1
 
EU road fatalities - age distribution
EU road fatalities - age distributionEU road fatalities - age distribution
EU road fatalities - age distribution
 
Transformation or Transition
Transformation or TransitionTransformation or Transition
Transformation or Transition
 
Buyer Persona - Key to B2B online marketing success
Buyer Persona - Key to B2B online marketing successBuyer Persona - Key to B2B online marketing success
Buyer Persona - Key to B2B online marketing success
 
J350 Social Media Intro
J350 Social Media IntroJ350 Social Media Intro
J350 Social Media Intro
 
Plan de-clase
Plan de-clasePlan de-clase
Plan de-clase
 
Educar valores a traves del futbol
Educar valores a traves del futbolEducar valores a traves del futbol
Educar valores a traves del futbol
 
The Virtual Strike: on pitches in advertising
The Virtual Strike: on pitches in advertisingThe Virtual Strike: on pitches in advertising
The Virtual Strike: on pitches in advertising
 
小黄鸭和鳄鱼
小黄鸭和鳄鱼小黄鸭和鳄鱼
小黄鸭和鳄鱼
 
Tautas ataudzes mērķi NAP2020 un to sasniegšanas gaita
Tautas ataudzes mērķi NAP2020 un to sasniegšanas gaitaTautas ataudzes mērķi NAP2020 un to sasniegšanas gaita
Tautas ataudzes mērķi NAP2020 un to sasniegšanas gaita
 
شهادة جامعة دمشق
شهادة جامعة دمشقشهادة جامعة دمشق
شهادة جامعة دمشق
 
Vi lever for å levere
Vi lever for å levereVi lever for å levere
Vi lever for å levere
 
Psych 100B
Psych 100BPsych 100B
Psych 100B
 
サーバ構築自動化 On aws sqaleの場合
サーバ構築自動化 On aws   sqaleの場合サーバ構築自動化 On aws   sqaleの場合
サーバ構築自動化 On aws sqaleの場合
 
Bear gss experiences shareing
Bear gss experiences shareingBear gss experiences shareing
Bear gss experiences shareing
 

More from egtra

Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALegtra
 
エクストリームC++11/14プログラミング
エクストリームC++11/14プログラミングエクストリームC++11/14プログラミング
エクストリームC++11/14プログラミングegtra
 
Visual C++ 2015の紹介(C++11/14的に)
Visual C++ 2015の紹介(C++11/14的に)Visual C++ 2015の紹介(C++11/14的に)
Visual C++ 2015の紹介(C++11/14的に)egtra
 
Casablanca
CasablancaCasablanca
Casablancaegtra
 
Firefox拡張機能を始める
Firefox拡張機能を始めるFirefox拡張機能を始める
Firefox拡張機能を始めるegtra
 
ATLに見る魔術
ATLに見る魔術ATLに見る魔術
ATLに見る魔術egtra
 
再変換 (K2Editor)
再変換 (K2Editor)再変換 (K2Editor)
再変換 (K2Editor)egtra
 
C++11概要 ライブラリ編
C++11概要 ライブラリ編C++11概要 ライブラリ編
C++11概要 ライブラリ編egtra
 
Boost.Range入門
Boost.Range入門Boost.Range入門
Boost.Range入門egtra
 
Boost.Graph入門
Boost.Graph入門Boost.Graph入門
Boost.Graph入門egtra
 

More from egtra (10)

Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSAL
 
エクストリームC++11/14プログラミング
エクストリームC++11/14プログラミングエクストリームC++11/14プログラミング
エクストリームC++11/14プログラミング
 
Visual C++ 2015の紹介(C++11/14的に)
Visual C++ 2015の紹介(C++11/14的に)Visual C++ 2015の紹介(C++11/14的に)
Visual C++ 2015の紹介(C++11/14的に)
 
Casablanca
CasablancaCasablanca
Casablanca
 
Firefox拡張機能を始める
Firefox拡張機能を始めるFirefox拡張機能を始める
Firefox拡張機能を始める
 
ATLに見る魔術
ATLに見る魔術ATLに見る魔術
ATLに見る魔術
 
再変換 (K2Editor)
再変換 (K2Editor)再変換 (K2Editor)
再変換 (K2Editor)
 
C++11概要 ライブラリ編
C++11概要 ライブラリ編C++11概要 ライブラリ編
C++11概要 ライブラリ編
 
Boost.Range入門
Boost.Range入門Boost.Range入門
Boost.Range入門
 
Boost.Graph入門
Boost.Graph入門Boost.Graph入門
Boost.Graph入門
 

Recently uploaded

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (9)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 

char32_tとXpressiveと