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

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 

Recently uploaded (8)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 

char32_tとXpressiveと