SlideShare una empresa de Scribd logo
1 de 67
Descargar para leer sin conexión
TMPライブラリの設計と実装
C++勉強会in広島
@PG_nonen
2014/01/11
概要
●
●
●
●
●

自己紹介
はじめに
Template Meta Programming(TMP)とは
TMPライブラリの設計と実装
質疑応答
自己紹介
● 名前:北原真一
○ HNは南山まさかず
○ 顔本は本名、その他はHN

● 棲息地
○ 広島は魔界

● その他
○ 平凡な大学生
○ C++、Haskell、女優の能年玲奈さんなどに興味・関心
があります
自己紹介
● Twitter
○ @PG_nonen

● Github
○ minamiyama1994

● 公開しているライブラリ
○ FTMP
○ parser_combinator
はじめに
● 本日は
○
○
○
○

「C++」って名前は知ってる
C++怖い
Template怖い
C++わかる

● ……等様々な人に来て頂いています
はじめに
● 初心者の人
○ 「こんな世界もあるんだな~」ぐらいの気軽な気持ちでど
うぞ

● ガチ勢の人
○ お手柔らかにお願いします
Templateとは
● N3337
○ 14
○ A template defines a family of classes or
functions or an alias for a family of types.
Templateとは
● コンパイル時に型や値を引数として渡す機能
● クラス、関数、型エイリアスなどに指定できる
● 以下の様な構文
template < Template仮引数リスト > 宣言
Template仮引数に指定できるもの
● 型
● 非型
● テンプレート
Template仮引数に指定できるもの
● 型
○
○
○
○

型が指定できます
以上
以下の様な構文
typenameとclassで意味は変わらない

template < typename Template仮引数名 >
宣言
template < class Template仮引数名 > 宣言
Template仮引数に指定できるもの
● 非型
○ N3337の14.1.4に記載されている
■
■
■
■
■
■
■
■

整数定数値
enum
オブジェクトポインタ
関数ポインタ
オブジェクトへの左辺値参照
関数への左辺値参照
メンバへのポインタ
std::nullptr
Template仮引数に指定できるもの
● 非型
○ 以下の様な構文

template < 型名 Template仮引数名 > 宣言
Template仮引数に指定できるもの
● テンプレート
○ クラステンプレートを指定できる
○ 以下の様な構文

template < template < Template仮引数リスト
> class Template仮引数名 > 宣言
TMPとは
● Template Meta Programmingの略
● ……の前に、Templateの使い方から
Templateの使い方
template < typename T >
struct Hoge
{
T value ;
};
Templateの使い方
template < typename T >
auto add ( T x1 , T x2 ) -> decltype ( x1 + x2 )
{
return x1 + x2 ;
}
Templateの使い方
● 本来はこのように「型によらない一般的な処理
を記述する」ためのもの
● ところが……
● Meta Programmingに使える!!!!!
● ……ところでMeta Programmingって?
Meta Programmingとは
● 通常のコーディングの「更に上位」のレベルで行
うプログラミング
● 例
○ 動的・動的にコードの書き換えを行えるLispのマクロ
○ 動的にクラスの構造などをいじれるRubyやIoなどLL言
語の機能
○ 静的に構文木などをいじれるTemplate Haskell
○ 静的に型などをいじれるC++のTemplate
Meta Programmingとは
● これらを用いて通常のプログラミングの「ワンラ
ンク上」のプログラミングを行う
● これがMeta Programming
● 今日はC++のTemplateを用いたTemplate
Meta Programmingと、そのライブラリについて
話す
C++におけるMeta Programming
● C++のソースコードを書いて実行するまでには
いくつかのステップが存在する
○ プリプロセス
○ コンパイル
○ 実行

● 通常のプログラミングは実行時処理
● プリプロセス時及びコンパイル時プログラミング
は「ワンランク上」のプログラミング
Template Meta Programmingとは
● Templateはコンパイル時に処理を行う
● Templateを用いてコンパイル時に行える「ワン
ランク上」の処理とは?
○ 型及びコンパイル時整数定数などの操作
○ 「コンパイル時に型やコンパイル時定数を操作する」の
がTemplate Meta Programming
Template Meta Programmingの例
#include<ostream>
#include<iostream>
template < unsigned N >
struct factorial
{
static constexpr unsigned value = N * factorial < N - 1 >::value ;
};
template < >
struct factorial < 0 >
{
static constexpr unsigned value = 1 ;
};
auto main ( ) -> int
{
std::cout << factorial < 10 >::value << std::endl ;
}
Template Meta Programmingの例
template < unsigned N >
struct factorial
{
// 整数Nが指定された時、valueの値はN*factorial < N - 1 >::value
// N = 5 : value = 5 * factorial < 4 >::value
// N = 4 : value = 4 * factorial < 3 >::value
// N = 3 : value = 3 * factorial < 2 >::value
// ...以下続く
static constexpr unsigned value = N * factorial < N - 1 >::value ;
};
Template Meta Programmingの例
template < >
struct factorial < 0 >
{
// N = 0 の時だけvalue=1に特殊化
static constexpr unsigned value = 1 ;
};
Template Meta Programmingの例
auto main ( ) -> int
{
// factorialのNに10を指定する
// N = 10 の時
// factorial < 10 >::value = 10 * 9 * 8 * … * 1 = 10!
// よって画面には 10! = 3628800 が表示される
std::cout << factorial < 10 >::value << std::endl ;
}
Template Meta Programmingの例
● factorialは階乗を求める「メタ関数」
● 階乗は「コンパイル時に」求められる
Template Meta Programmingの例
#include<utility>
#include<string>
template < typename >
struct swap ;
template < typename T1 , typename T2 >
struct swap < std::pair < T1 , T2 > >
{
using type = std::pair < T2 , T1 > ;
};
auto main ( ) -> int
{
swap < std::pair < int , std::string > >::type pair = std::make_pair ( “Hello” , 1 ) ;
}
Template Meta Programmingの例
// swapは型を1つ受け取るメタ関数
template < typename >
struct swap ;
template < typename T1 , typename T2 >
// std::pair < T1 , T2 >形式の型だけ受け付けるように特殊化
struct swap < std::pair < T1 , T2 > >
{
// T1とT2を取り替えたstd::pairをメンバtypedefのtypeに指定する
using type = std::pair < T2 , T1 > ;
};
Template Meta Programmingの例
auto main ( ) -> int
{
// swap < std::pair < int , std::string > >::typeはstd::pairの1つ目の型と2つ目の型を入れ替えた
新しいstd::pair
// 1つ目の型 -> int
// 2つ目の型 -> std::string
// 従って、swap < std::pair < int , std::string > >::typeはstd::pair < std::string , int >
// なので以下のコードはコンパイルが通る
swap < std::pair < int , std::string > >::type pair = std::make_pair ( “Hello” , 1 ) ;
}
Template Meta Programming
● TMPを行うと、このようにコンパイル時に整数定
数値や型を操作することができる
TMPライブラリの設計と実装
● ではいよいよ本題の「TMPライブラリの設計と
実装」について
TMPライブラリの設計と実装
● まず、TMPの際に使われる慣習について
○ メタ関数の「戻り値」としてはtypeメンバが使われる
○ 以上

● 流石に少し解説
○ メタ関数は単なるtemplateなstruct/class
○ C++の言語仕様として「戻り値」などが設定されているわ
けではない
○ そこで、慣習として、typeメンバがよく使われる
TMPライブラリの設計と実装
● TMPの特徴
○ 入力(Template仮引数)によって結果(typeメンバ)は決
まる
○ Template仮引数以外に外部からの入力はないし、外部
に影響を与える処理もない
○ つまり、純粋関数型プログラミングとなる
TMPライブラリの設計と実装
● TMPは純粋関数型プログラミング
● 改めてTMP用のライブラリを設計・実装するな
ら既存の関数型言語のライブラリに倣った方が
いい
● ……と、その前に
● 既存のライブラリは?
既存のTMPライブラリ
● 既存のTMPライブラリ
○ 事実上デファクトスタンダードとなっているライブラリが存
在する
○ Boost.MPL
○ では、肝心のBoost.MPLはどういった設計になっている
のか?
既存のTMPライブラリ
● Boost.MPLの設計
○ データ構造としての各種コンテナ
○ それらに対して作用する各種アルゴリズム
○ データ構造とアルゴリズムを橋渡しするイテレータ
■ →STLに倣った設計に
既存のTMPライブラリ
● Boost.MPLの設計の問題点
○ STLの設計に倣っている
○ STLは基本的に手続き型のコードで使われるのが前提
■ 関数型プログラミングであるTMPとは相性が悪い
○ また、各種コンテナは複雑な内部構造を採用
○ 論理的な等値比較などが面倒くさい
○ 要するにBoost.MPLは使いにくい
既存のTMPライブラリ
● Boost.MPL以外のメジャーなTMPライブラリは
あまりない
● では、作ってしまえ!
TMPライブラリの設計と実装
● 設計の方針
○ Haskellなどの純粋関数型言語のライブラリ設計に倣う
○ →List・Set・Mapなどとそれに対する関数群
○ 論理的な等値比較などは細かい内部構造を意識しなく
ても可能なように設計
○ →Boost.MPLとは異なり、すべての型に対して論理的な
等値比較を提供

● というわけで完成しました
○ https://github.com/minamiyama1994/FTMP
TMPライブラリの設計と実装
● FTMPの設計
○ list,set,dictと言った基礎的なコンテナ
○ ifやeval_ifなどと言ったutilityメタ関数
○ Haskellのライブラリを参考に作成した、コンテナなどを
引数として受け取るメタ関数
TMPライブラリの設計と実装
● FTMPの設計
○ list,set,dictと言った基礎的なコンテナ
○ ifやeval_ifなどと言ったutilityメタ関数
○ Haskellのライブラリを参考に作成した、コンテナなどを
引数として受け取るメタ関数
各種コンテナ
● 型を操作するための各種コンテナ
○ list
○ set
○ dict
各種コンテナ
● list
○ list < T1 , T2 , T3 … TN >
○ 順序付き、重複あり
○ 型のリスト
各種コンテナ
● set
○ set < T1 , T2 , T3 … TN >
○ 順序不定、重複なし
○ 型のセット(集合)
各種コンテナ
● dict
○ dict < list < K1 , T1 > , list < K2 , T2 > , ... list < KN ,
TN > >
○ 順序不定、キーの重複なし
○ 型の辞書
utilityメタ関数
● ifやeval_if等の各種utilityメタ関数
○
○
○
○
○
○

if_
if_c
eval_if
eval_if_c
print
lambda
utilityメタ関数
● if_
○ if_ < cond , true_case , false_case >
○ cond::type::valueがtrueの場合はtypeはtrue_case
○ cond::type::valueがfalseの場合はtypeはfalse_case
utilityメタ関数
● if_c
○ if_ < cond , true_case , false_case >
○ condがtrueの場合はtypeはtrue_case
○ condがfalseの場合はtypeはfalse_case
utilityメタ関数
● eval_if
○ eval_if < cond , true_case , false_case >
○ cond::type::valueがtrueの場合はtypeはtrue_case::
type
○ cond::type::valueがfalseの場合はtypeはfalse_case::
type
utilityメタ関数
● eval_if_c
○ eval_if_c < cond , true_case , false_case >
○ condがtrueの場合はtypeはtrue_case::type
○ condがfalseの場合はtypeはfalse_case::type
utilityメタ関数
● print
○
○
○
○
○

print < T >
引数は任意の型
結果はTと等しい
ただし強制的にコンパイルエラーを出す
TMP途中でどのような型が生成されているのかを確認
するのに便利
utilityメタ関数
● lambda
○ 少し複雑でかつ重要な役割を持っているので、少し詳し
く説明する
○ 構成要素
■ プレースホルダー
■ lambdaによる引数の適用
lambda
● プレースホルダー
○ 後々ちゃんとした値に置き換える「仮の値」
○ arg<N>(Nは0以上の整数値)を指定する
lambda
● lambdaによる引数の適用
○ メタ関数Fがあるとして、lambda < F < arg1 , arg2 …
argN > >を考える
○ arg1,arg2...argNの中にはarg<M>形式のプレースホル
ダーがある
○ lambda < F < arg1 , arg2 … argN > >::apply < a0 ,
a1 … aN >::typeで、arg1,arg2...argNの中のarg<M>
はaMに置き換えられ、F < arg1 , arg2 … argN >::type
がlambdaの結果として求められる
lambda
lambda < F < double , arg < 2 > , arg < 0 > , long , arg < 1 > > >::apply < char , short , int >::
type
lambda < F < double , arg < 2 > , arg < 0 > , long , arg < 1 > > >::apply < char , short , int >::
type
lambda < F < double , arg < 2 > , char , long , arg < 1 > > >::apply < char , short , int >::type
lambda < F < double , arg < 2 > , char , long , arg < 1 > > >::apply < char , short , int >::type
lambda < F < double , arg < 2 > , char , long , short > >::apply < char , short , int >::type
lambda < F < double , arg < 2 > , char , long , short > >::apply < char , short , int >::type
lambda < F < double , int , char , long , short > >::apply < char , short , int >::type
F < double , int , char , long , short >::type
TMPライブラリの設計と実装
● FTMPの設計
○ list,set,dictと言った基礎的なコンテナ
○ ifやeval_ifなどと言ったutilityメタ関数
○ Haskellのライブラリを参考に作成した、コンテナなどを
引数として受け取るメタ関数
コンテナ用の各種メタ関数
● list用のメタ関数
● set用のメタ関数
● dict用のメタ関数
コンテナ用の各種メタ関数
● list,set,dict用のメタ関数
○ HaskellのData.List,Data.Set,Data.Mapライブラリを参
考に
○ MaybeなどのHaskellの複雑な機能を使っている関数は
適当に簡略化
■ Maybeの場合は例えばNothingに該当する場合は
その場でコンパイルを失敗させる
TMPライブラリの実装
● TMPライブラリを実装する際のポイントについて
○ 再帰深度
■ 処理系定義($14.7.1.15)
■ ただし、規格での推奨がある(Annex B)
●

「Recursively nested template instantiations [1024].」

■ listに対して線形の再帰深度のアルゴリズムを実装
すると、大きなlistなどに対しては容易に再帰深度制
限にぶつかることが考えられる
●

再帰深度を対数オーダーに制限する
TMPライブラリの実装
● 再帰深度を対数オーダーに抑える
○ list操作は主にfoldr,foldlを用いて実装される
○ foldr,foldlの再帰深度を対数オーダーに抑えることを考
える
TMPライブラリの実装
● foldrの素直な実装
TMPライブラリの実装
● foldrの対数再帰深度な実装
TMPライブラリの実装
● foldr,foldlの再帰深度を対数オーダーにするこ
とにより、多くの処理の再帰深度を対数オー
ダーに抑えることができる
○ →要素数の多いlistなどに対しても適用できる
TMPライブラリ
● Boost.MPLと比較して
○ メリット
■ Haskellのライブラリに倣ったことにより、よりスムー
ズなTMPが可能に
○ デメリット
■ テストや、機能が充実しておらず、実績がない
TMPライブラリ
● 適用例
○ 自作パーサコンビネータ
■ https://github.
com/minamiyama1994/parser_combinator
■ 構文解析表を出力する元になる各種情報をTMPを
用いて求めている
TMPライブラリ
● 今後の課題
○ テストを充実させる
○ 実装を充実させる
○ ドキュメントを充実させる
ご清聴ありがとうございました
時間があるようなら質疑応答に入ります

Más contenido relacionado

La actualidad más candente

静的型付け言語Python
静的型付け言語Python静的型付け言語Python
静的型付け言語Pythonkiki utagawa
 
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talkmitamex4u
 
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)Akihiko Matuura
 
Pythonと型チェッカー
Pythonと型チェッカーPythonと型チェッカー
Pythonと型チェッカーTetsuya Morimoto
 
Define and expansion of cpp macro
Define and expansion of cpp macroDefine and expansion of cpp macro
Define and expansion of cpp macrodigitalghost
 
Python と型アノテーション
Python と型アノテーションPython と型アノテーション
Python と型アノテーションK Yamaguchi
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターンMoriharu Ohzu
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~CHY72
 
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプKohsuke Yuasa
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarrayRyosuke839
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
 
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Tetsuya Morimoto
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.kiki utagawa
 
Mesh tensorflow
Mesh tensorflowMesh tensorflow
Mesh tensorflowkuroko
 
constexpr idioms
constexpr idiomsconstexpr idioms
constexpr idiomsfimbul
 
TensorFlow Operation 作ってみた
TensorFlow Operation 作ってみたTensorFlow Operation 作ってみた
TensorFlow Operation 作ってみたTakuya Sakamoto
 

La actualidad más candente (20)

静的型付け言語Python
静的型付け言語Python静的型付け言語Python
静的型付け言語Python
 
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
 
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
 
Pythonと型チェッカー
Pythonと型チェッカーPythonと型チェッカー
Pythonと型チェッカー
 
Define and expansion of cpp macro
Define and expansion of cpp macroDefine and expansion of cpp macro
Define and expansion of cpp macro
 
Python と型アノテーション
Python と型アノテーションPython と型アノテーション
Python と型アノテーション
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターン
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
 
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)
 
C++の黒魔術
C++の黒魔術C++の黒魔術
C++の黒魔術
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
 
Mesh tensorflow
Mesh tensorflowMesh tensorflow
Mesh tensorflow
 
constexpr idioms
constexpr idiomsconstexpr idioms
constexpr idioms
 
TensorFlow Operation 作ってみた
TensorFlow Operation 作ってみたTensorFlow Operation 作ってみた
TensorFlow Operation 作ってみた
 
C++0x総復習
C++0x総復習C++0x総復習
C++0x総復習
 
C++14言語編
C++14言語編C++14言語編
C++14言語編
 

Destacado

Database.persistentの話
Database.persistentの話Database.persistentの話
Database.persistentの話真一 北原
 
Unlock the Keys to True Leadership
Unlock the Keys to True LeadershipUnlock the Keys to True Leadership
Unlock the Keys to True LeadershipMichael Mamas
 
Sound Different: Tips on differentiating with better writing to build your value
Sound Different: Tips on differentiating with better writing to build your valueSound Different: Tips on differentiating with better writing to build your value
Sound Different: Tips on differentiating with better writing to build your valueBruce Rowe
 
Tues. March 21st Pine River Announcements
Tues. March 21st Pine River Announcements  Tues. March 21st Pine River Announcements
Tues. March 21st Pine River Announcements Pine River
 
ライブラリでよくある動きをUIKitのみでDIYしてみる(Part1)
ライブラリでよくある動きをUIKitのみでDIYしてみる(Part1)ライブラリでよくある動きをUIKitのみでDIYしてみる(Part1)
ライブラリでよくある動きをUIKitのみでDIYしてみる(Part1)Fumiya Sakai
 
The Resilient Organization: Adapting to Change in a Challenging World
The Resilient Organization: Adapting to Change in a Challenging WorldThe Resilient Organization: Adapting to Change in a Challenging World
The Resilient Organization: Adapting to Change in a Challenging WorldOlivier Serrat
 
Pixel landscapes: l'immagine urbana come collage
Pixel landscapes: l'immagine urbana come collagePixel landscapes: l'immagine urbana come collage
Pixel landscapes: l'immagine urbana come collageDavide Tommaso Ferrando
 
How did we get to Containers: A brief History of Computing
How did we get to Containers: A brief History of ComputingHow did we get to Containers: A brief History of Computing
How did we get to Containers: A brief History of ComputingSimone Morellato
 
R. Villano - Meridiani: Etica - libro 3^ ed. (parte 3)
R. Villano  - Meridiani: Etica - libro 3^ ed. (parte 3)R. Villano  - Meridiani: Etica - libro 3^ ed. (parte 3)
R. Villano - Meridiani: Etica - libro 3^ ed. (parte 3)Raimondo Villano
 
SureChEMBL patent annotations in Open PHACTS
SureChEMBL patent annotations in Open PHACTSSureChEMBL patent annotations in Open PHACTS
SureChEMBL patent annotations in Open PHACTSGeorge Papadatos
 
I.G. numérique et agriculture
I.G. numérique et agricultureI.G. numérique et agriculture
I.G. numérique et agricultureIsabelle Goudchaux
 
March 21 letter from Waste Management to City of Ottawa
March 21 letter from Waste Management to City of OttawaMarch 21 letter from Waste Management to City of Ottawa
March 21 letter from Waste Management to City of OttawaStittsvilleCentral.ca
 
Innovation in Telecom & Smart City Project Management
Innovation in Telecom & Smart City Project Management Innovation in Telecom & Smart City Project Management
Innovation in Telecom & Smart City Project Management Giuseppe Incitti
 
Relatório técnico Iluminação Oficina Central
Relatório técnico   Iluminação Oficina Central Relatório técnico   Iluminação Oficina Central
Relatório técnico Iluminação Oficina Central Alexandre Grossi
 
Press kit - South Europe Atlantic high-speed rail line
Press kit - South Europe Atlantic high-speed rail linePress kit - South Europe Atlantic high-speed rail line
Press kit - South Europe Atlantic high-speed rail lineLISEA
 

Destacado (19)

Database.persistentの話
Database.persistentの話Database.persistentの話
Database.persistentの話
 
Unlock the Keys to True Leadership
Unlock the Keys to True LeadershipUnlock the Keys to True Leadership
Unlock the Keys to True Leadership
 
Sound Different: Tips on differentiating with better writing to build your value
Sound Different: Tips on differentiating with better writing to build your valueSound Different: Tips on differentiating with better writing to build your value
Sound Different: Tips on differentiating with better writing to build your value
 
THE CROWN MR JAMES
THE CROWN MR JAMESTHE CROWN MR JAMES
THE CROWN MR JAMES
 
Tues. March 21st Pine River Announcements
Tues. March 21st Pine River Announcements  Tues. March 21st Pine River Announcements
Tues. March 21st Pine River Announcements
 
ライブラリでよくある動きをUIKitのみでDIYしてみる(Part1)
ライブラリでよくある動きをUIKitのみでDIYしてみる(Part1)ライブラリでよくある動きをUIKitのみでDIYしてみる(Part1)
ライブラリでよくある動きをUIKitのみでDIYしてみる(Part1)
 
The Resilient Organization: Adapting to Change in a Challenging World
The Resilient Organization: Adapting to Change in a Challenging WorldThe Resilient Organization: Adapting to Change in a Challenging World
The Resilient Organization: Adapting to Change in a Challenging World
 
Pixel landscapes: l'immagine urbana come collage
Pixel landscapes: l'immagine urbana come collagePixel landscapes: l'immagine urbana come collage
Pixel landscapes: l'immagine urbana come collage
 
How did we get to Containers: A brief History of Computing
How did we get to Containers: A brief History of ComputingHow did we get to Containers: A brief History of Computing
How did we get to Containers: A brief History of Computing
 
Fuerzas del mercado
Fuerzas del mercadoFuerzas del mercado
Fuerzas del mercado
 
Manure
ManureManure
Manure
 
R. Villano - Meridiani: Etica - libro 3^ ed. (parte 3)
R. Villano  - Meridiani: Etica - libro 3^ ed. (parte 3)R. Villano  - Meridiani: Etica - libro 3^ ed. (parte 3)
R. Villano - Meridiani: Etica - libro 3^ ed. (parte 3)
 
SureChEMBL patent annotations in Open PHACTS
SureChEMBL patent annotations in Open PHACTSSureChEMBL patent annotations in Open PHACTS
SureChEMBL patent annotations in Open PHACTS
 
I.G. numérique et agriculture
I.G. numérique et agricultureI.G. numérique et agriculture
I.G. numérique et agriculture
 
March 21 letter from Waste Management to City of Ottawa
March 21 letter from Waste Management to City of OttawaMarch 21 letter from Waste Management to City of Ottawa
March 21 letter from Waste Management to City of Ottawa
 
Geoeconomic atlas of world energy. A vision of the future to 2030
Geoeconomic atlas of world energy. A vision of the future to 2030Geoeconomic atlas of world energy. A vision of the future to 2030
Geoeconomic atlas of world energy. A vision of the future to 2030
 
Innovation in Telecom & Smart City Project Management
Innovation in Telecom & Smart City Project Management Innovation in Telecom & Smart City Project Management
Innovation in Telecom & Smart City Project Management
 
Relatório técnico Iluminação Oficina Central
Relatório técnico   Iluminação Oficina Central Relatório técnico   Iluminação Oficina Central
Relatório técnico Iluminação Oficina Central
 
Press kit - South Europe Atlantic high-speed rail line
Press kit - South Europe Atlantic high-speed rail linePress kit - South Europe Atlantic high-speed rail line
Press kit - South Europe Atlantic high-speed rail line
 

Similar a C++勉強会in広島プレゼン資料

競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるHideyuki Tanaka
 
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編道化師 堂華
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perlJiro Nishiguchi
 
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみたMTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみたKatsuhiro Endo
 
エンジニア知識共有会発表資料 20090910
エンジニア知識共有会発表資料 20090910エンジニア知識共有会発表資料 20090910
エンジニア知識共有会発表資料 20090910ngi group.
 
Tremaとtrema edgeの違い
Tremaとtrema edgeの違いTremaとtrema edgeの違い
Tremaとtrema edgeの違いhiroshi oshiba
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
DTrace for biginners part(2)
DTrace for biginners part(2)DTrace for biginners part(2)
DTrace for biginners part(2)Shoji Haraguchi
 
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践LINE Corporation
 
テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式digitalghost
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章Tomonobu_Hirano
 
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みくださいC++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みくださいdigitalghost
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案yushin_hirano
 

Similar a C++勉強会in広島プレゼン資料 (20)

競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perl
 
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみたMTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
 
C++ template-primer
C++ template-primerC++ template-primer
C++ template-primer
 
エンジニア知識共有会発表資料 20090910
エンジニア知識共有会発表資料 20090910エンジニア知識共有会発表資料 20090910
エンジニア知識共有会発表資料 20090910
 
Tremaとtrema edgeの違い
Tremaとtrema edgeの違いTremaとtrema edgeの違い
Tremaとtrema edgeの違い
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
CMSI計算科学技術特論C (2015) OpenMX とDFT②
CMSI計算科学技術特論C (2015) OpenMX とDFT②CMSI計算科学技術特論C (2015) OpenMX とDFT②
CMSI計算科学技術特論C (2015) OpenMX とDFT②
 
DTrace for biginners part(2)
DTrace for biginners part(2)DTrace for biginners part(2)
DTrace for biginners part(2)
 
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
 
テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
 
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みくださいC++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案
 
秀スクリプトの話
秀スクリプトの話秀スクリプトの話
秀スクリプトの話
 
Sml#探検隊
Sml#探検隊Sml#探検隊
Sml#探検隊
 
Processing
ProcessingProcessing
Processing
 
Tokyor23 doradora09
Tokyor23 doradora09Tokyor23 doradora09
Tokyor23 doradora09
 

Más de 真一 北原

能年玲奈ちゃん駆動開発
能年玲奈ちゃん駆動開発能年玲奈ちゃん駆動開発
能年玲奈ちゃん駆動開発真一 北原
 
templateを依存型っぽく使ってみる
templateを依存型っぽく使ってみるtemplateを依存型っぽく使ってみる
templateを依存型っぽく使ってみる真一 北原
 
すごいMonad入門
すごいMonad入門すごいMonad入門
すごいMonad入門真一 北原
 
Lt駆動開発03 コンパイル時fizz buzzやってみた
Lt駆動開発03 コンパイル時fizz buzzやってみたLt駆動開発03 コンパイル時fizz buzzやってみた
Lt駆動開発03 コンパイル時fizz buzzやってみた真一 北原
 
Lt駆動開発03 サイト運営してみた結果
Lt駆動開発03 サイト運営してみた結果Lt駆動開発03 サイト運営してみた結果
Lt駆動開発03 サイト運営してみた結果真一 北原
 
型安全Printf作ってみた
型安全Printf作ってみた型安全Printf作ってみた
型安全Printf作ってみた真一 北原
 
能年玲奈ちゃんのファンとして本気を出してみた
能年玲奈ちゃんのファンとして本気を出してみた能年玲奈ちゃんのファンとして本気を出してみた
能年玲奈ちゃんのファンとして本気を出してみた真一 北原
 
第2回 mix c++勉強会@tokyo 資料
第2回 mix c++勉強会@tokyo 資料第2回 mix c++勉強会@tokyo 資料
第2回 mix c++勉強会@tokyo 資料真一 北原
 

Más de 真一 北原 (11)

能年玲奈ちゃん駆動開発
能年玲奈ちゃん駆動開発能年玲奈ちゃん駆動開発
能年玲奈ちゃん駆動開発
 
型! 型!
型! 型!型! 型!
型! 型!
 
型!
型!型!
型!
 
templateを依存型っぽく使ってみる
templateを依存型っぽく使ってみるtemplateを依存型っぽく使ってみる
templateを依存型っぽく使ってみる
 
すごいMonad入門
すごいMonad入門すごいMonad入門
すごいMonad入門
 
すごいCoq入門
すごいCoq入門すごいCoq入門
すごいCoq入門
 
Lt駆動開発03 コンパイル時fizz buzzやってみた
Lt駆動開発03 コンパイル時fizz buzzやってみたLt駆動開発03 コンパイル時fizz buzzやってみた
Lt駆動開発03 コンパイル時fizz buzzやってみた
 
Lt駆動開発03 サイト運営してみた結果
Lt駆動開発03 サイト運営してみた結果Lt駆動開発03 サイト運営してみた結果
Lt駆動開発03 サイト運営してみた結果
 
型安全Printf作ってみた
型安全Printf作ってみた型安全Printf作ってみた
型安全Printf作ってみた
 
能年玲奈ちゃんのファンとして本気を出してみた
能年玲奈ちゃんのファンとして本気を出してみた能年玲奈ちゃんのファンとして本気を出してみた
能年玲奈ちゃんのファンとして本気を出してみた
 
第2回 mix c++勉強会@tokyo 資料
第2回 mix c++勉強会@tokyo 資料第2回 mix c++勉強会@tokyo 資料
第2回 mix c++勉強会@tokyo 資料
 

Último

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 

Último (10)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 

C++勉強会in広島プレゼン資料