SlideShare a Scribd company logo
1 of 59
Download to read offline
C++
Template Meta
Programming
の、さわりだけ...
CORE 北海道カンパニー 勉強会
2013/7/26 松浦
13年7月27日土曜日
C++テンプレートを使ったメタプロ
グラミングについて紹介します!
まあ、そんなのもあるんだー、ふー
ん、くらいな感じで
今日は、
13年7月27日土曜日
13年7月27日土曜日
メタプログラムとは何か?
テンプレートの基礎
テンプレート特殊化
再帰テンプレート
メタ関数
型シーケンス
さいごに
目次
13年7月27日土曜日
メタプログラムとは何か?
テンプレートの基礎
テンプレート特殊化
再帰テンプレート
メタ関数
型シーケンス
さいごに
13年7月27日土曜日
ロジックを直接コーディングするの
ではなく、あるパターンをもったロ
ジックを生成する高位ロジックによ
ってプログラミングを行う方法、ま
たその高位ロジックを定義する方法
のこと。........wikipedia
13年7月27日土曜日
いみが まったくわからない
いやん♡
13年7月27日土曜日
プログラムを生成する
プログラム、ってことで
いいと思うぽよ。
ようは
13年7月27日土曜日
例えばYACC
expression : term
| expression ‘+’ term {$$=$1+$2;}
| expression ‘-’ term {$$=$1-$2;} ;
term : factor
| term ‘*’ factor { $$ = $1 * $2; }
| term ‘/’ factor { $$ = $1 / $2; } ;
factor : INTEGER
| group ;
group : ‘(’ expression ‘)’ ;
13年7月27日土曜日
YACC
.y YACC .c
13年7月27日土曜日
YACC
.y YACC .c
ドメイン言語
(DSL)
ホスト言語
13年7月27日土曜日
boost.spirit
expr = ( term[expr.val = _1] >> '+' >> expr[expr.val += _1])
| ( term[expr.val = _1] >> '-' >> expr[expr.val -= _1])
| term[expr.val = _1] ;
term = ( factor[term.val = _1] >> '*' >> term[term.val *= _1])
| ( factor[term.val = _1] >> '/' >> term[term.val /= _1])
| factor[term.val = _1] ;
factor = integer[factor.val = _1]
| ( '(' >> expr[factor.val- _1] >> ')' ) ;
13年7月27日土曜日
boost.spirit
.cpp
13年7月27日土曜日
boost.spirit
.cppドメイン言語 ホスト言語
13年7月27日土曜日
boost.spirit
.cppドメイン言語 ホスト言語
EDSL(埋め込みドメイン言語)
13年7月27日土曜日
boost.spirit
.cppドメイン言語 ホスト言語
EDSL(埋め込みドメイン言語)
YACC相当のものは?
13年7月27日土曜日
boost.spirit
.cppドメイン言語 ホスト言語
EDSL(埋め込みドメイン言語)
YACC相当のものは?
テンプレート・メタプログラミング
13年7月27日土曜日
なぜC++でメタプロ?
別の構文規則を学ぶ必要がない
他のメタプロとの相互運用
余分な構築ステップ不要
品質、再利用、可搬性
13年7月27日土曜日
とはいえ
boost.spiritのような究極のメタプロ
グラミングの話は割愛します。
このあとの章では、C++メタプロを
支える基本的な部分だけお話します。
(ちゃんと話せる自信がないというのはナイショぽよ
13年7月27日土曜日
メタプログラムとは何か?
テンプレートの基礎
テンプレート特殊化
再帰テンプレート
メタ関数
型シーケンス
さいごに
13年7月27日土曜日
普通のジェネリック
// C#
List<string> list = new List<string>();
list.add("hoge"); list.add("page");
// Java
List<String> list = new ArrayList<String>();
list.add("hoge"); list.add("page");
//C++
list<string> list;
list.insert("hoge"); list.insert("page");
13年7月27日土曜日
非型テンプレート
//C++
template<int N>
struct pow {
static const int value = N*N;
};
int n = pow<3>::value; // n = 3*3;
13年7月27日土曜日
型の操作
ポインタを追加する
//C++
template<class T>
struct add_pointer {
typedef T* type;
};
int n = 10;
// int* p = &n;
add_pointer<int>::type p = &n;
13年7月27日土曜日
C++テンプレート
コンパイル時に計算してしまう(実行
時コスト0)。
非型テンプレート
型操作
.....などなど
13年7月27日土曜日
メタプログラムとは何か?
テンプレートの基礎
テンプレート特殊化
再帰テンプレート
メタ関数
型シーケンス
さいごに
13年7月27日土曜日
add_pointerの例
ん??
// int* p = &n;
add_pointer<int>::type p1 = &n;
// これはエラー:int** p2 = &n;
add_pointer<int*>::type p2 = &n;
13年7月27日土曜日
そこで特殊化
template<class T>
struct add_pointer {
typedef T* type;
};
// そもそもポインタだったらこっち
template<class T>
struct add_pointer<T*> {
typedef T* type;
};
int n = 10;
// int* p = &n;
add_pointer<int>::type p1 = &n;
// めでたし
add_pointer<int*>::type p2 = &n;
13年7月27日土曜日
テンプレート特殊化
テンプレート特殊化により、
コンパイル時に条件分岐を行
うことができる。
13年7月27日土曜日
コンパイル時 if文
template<bool b, class T1, class T2>
struct If_;
template<class T1, class T2>
struct If_<true,T1,T2> {
typedef T1 type; // 条件が真ならT1を使用する
};
template<class T1, class T2>
struct If_<false,T1,T2> {
typedef T2 type; // 条件が偽ならT2を使用する
};
If_<sizeof(long) > sizeof(char), char, long>::type x; // char x;
13年7月27日土曜日
コンパイル時assert
// 宣言だけ
template<bool b>
struct Static_assert;
// true版のみ定義しfalse版は定義しない
template<>
struct Static_assert<true>{};
#define STATIC_ASSERT(b) { sizeof( Static_assert<b> ); }
void foo() {
STATIC_ASSERT(sizeof(long) == 4);
char dest[32];
char src[16];
STATIC_ASSERT(sizeof(dest) >= sizeof(src));
::memcpy(dest,src,sizeof(src));
}
13年7月27日土曜日
C++テンプレート
コンパイル時に計算してしまう(実行
時コスト0)。
非型テンプレート
型操作
特殊化による条件分岐
13年7月27日土曜日
メタプログラムとは何か?
テンプレートの基礎
テンプレート特殊化
再帰テンプレート
メタ関数
型シーケンス
さいごに
13年7月27日土曜日
普通に再帰で階乗計算
int factorial(int N) {
return N==0 ? 1 : N*factorial(N-1);
}
int n = factorial(3); // 6
13年7月27日土曜日
再帰テンプレートで
// 階乗を求める
template <int N>
struct factorial_t {
static const int value = N*factorial_t<N-1>::value;
};
// N==0の場合は特殊化する
template <>
struct factorial_t<0> {
static const int value = 1;
};
int n2 = factorial_t<3>::value; // n2 = 6;
13年7月27日土曜日
再帰テンプレート
再帰テンプレートにより、コ
ンパイル時に繰り返し処理を
行うことができる。
13年7月27日土曜日
余談
C++テンプレートはチューリング
完全である(制限:再帰に限界あり)
C++ Templates are Turing Complete
http://ubietylab.net/ubigraph/content/
Papers/pdf/CppTuring.pdf
13年7月27日土曜日
C++テンプレート
コンパイル時に計算してしまう(実行時コ
スト0)。
非型テンプレート
型操作
特殊化による条件分岐
再帰テンプレートによる繰り返し
13年7月27日土曜日
このへんから
ちょっとだけ応用な感じです。
ちょっとだけよ♡
13年7月27日土曜日
メタプログラムとは何か?
テンプレートの基礎
テンプレート特殊化
再帰テンプレート
メタ関数
型シーケンス
さいごに
13年7月27日土曜日
メタ関数とは
add_pointer<int>::type pi;
関数名
int v = factorial_t<3>::value;
パラメータ 戻り値(型)
関数名 パラメータ 戻り値(値)
13年7月27日土曜日
高階関数を考えてみよう
まずは普通のテンプレート関数
f(f(x)) の結果を返すtwice
template<class F, class X>
struct twice {
static int value(const X& x ){
return F::apply(F::apply(x));
}
};
struct div2 {
static int apply(int x) { return x/2; }
};
std::cout << twice<div2,int>::value(8); // 2
13年7月27日土曜日
高階メタ関数
template<class F, int N>
struct twice {
static const int value =
F::template apply<
F::template apply<N>::value
>::value;
};
struct div2 {
template<int N>
struct apply {
static const int value = N/2;
};
};
std::cout << twice<div2,8>::value; // 2
13年7月27日土曜日
メタプログラムとは何か?
テンプレートの基礎
テンプレート特殊化
再帰テンプレート
メタ関数
型シーケンス
さいごに
13年7月27日土曜日
こんなことしたい
それぞれの型のインスタンスを用意してメソ
ッドを呼び出したい。
struct A { std::string name() const { return "A!"; } };
struct B { std::string name() const { return "B!"; } };
struct C { std::string name() const { return "C!"; } };
struct D { std::string name() const { return "D!"; } };
/* こんなことしたい
A a; a.name(); B b; b.name();
C c; c.name(); D d; d.name();
とか
for( v : [A,B,C,D] ) print( v.name() ); // 擬似コードです
*/
13年7月27日土曜日
JavaやC#、ObjC
あたりのアプローチ
リフレクションを使う。
Classクラスのようなメタクラスの配
列を使って動的生成する、とかね。
C++のリフレクションは貧弱。
どうしよう。
13年7月27日土曜日
C++のアプローチ
メタプログラミングで型のリスト(型シーケ
ンス)を用意し、各型にアクセスする仕掛け
を考えてみる。
TypeList<A,B,C,D>::type;
13年7月27日土曜日
C++のアプローチ
メタプログラミングで型のリスト(型シーケ
ンス)を用意し、各型にアクセスする仕掛け
を考えてみる。
TypeList<A,B,C,D>::type;
このへんをどうするか??
13年7月27日土曜日
型シーケンス
template<class First, class Rest>
struct Cons {
typedef First first;
typedef Rest rest;
};
struct ConsNil {};
// 型シーケンス TypeList<T1,T2,T3,T4>
template<class T1, class T2, class T3, class T4>
struct TypeList {
typedef Cons<T1,Cons<T2,Cons<T3,Cons<T4,ConsNil> > > > type;
};
13年7月27日土曜日
型シーケンス
template<class First, class Rest>
struct Cons {
typedef First first;
typedef Rest rest;
};
struct ConsNil {};
// 型シーケンス TypeList<T1,T2,T3,T4>
template<class T1, class T2, class T3, class T4>
struct TypeList {
typedef Cons<T1,Cons<T2,Cons<T3,Cons<T4,ConsNil> > > > type;
};
このへんがキモ
13年7月27日土曜日
むずくないよ
template<class First, class Rest>
struct Cons {
typedef First first;
typedef Rest rest;
};
struct ConsNil {};
template<class T1, class T2, class T3, class T4>
struct TypeList {
typedef Cons<T1,Cons<T2,Cons<T3,Cons<T4,ConsNil> > > > type;
};
// typedef First first; : T1
// typedef Rest rest; : Cons<T2,Cons<T3,Cons<T4,ConsNil> > >
// typedef First first; : T2
// typedef Rest rest; : Cons<T3,Cons<T4,ConsNil> >
// typedef First first; : T3
// typedef Rest rest; : Cons<T4,ConsNil>
// typedef First first; : T4
// typedef Rest rest; : ConsNil ← ターミネータ
13年7月27日土曜日
あとは繰り返す処理
// typedef First first; : T1
// typedef Rest rest; : Cons<T2,Cons<T3,Cons<T4,ConsNil> > >
// typedef First first; : T2
// typedef Rest rest; : Cons<T3,Cons<T4,ConsNil> >
// typedef First first; : T3
// typedef Rest rest; : Cons<T4,ConsNil>
// typedef First first; : T4
// typedef Rest rest; : ConsNil ← ターミネータ
template<class CONS>
struct for_each {
template<class FUNC>
static void apply( const FUNC& f ) {
typename CONS::first v;
f( v );
for_each<typename CONS::rest>::apply(f);
}
};
13年7月27日土曜日
ターミネータ忘れてた!
template<class CONS>
struct for_each {
template<class FUNC>
static void apply( const FUNC& f ) {
typename CONS::first v;
f( v );
for_each<typename CONS::rest>::apply(f);
}
};
// ターミネータ用に特殊化
template<>
struct for_each<ConsNil> {
template<class FUNC>
static void apply( const FUNC& ){ }
};
13年7月27日土曜日
使ってみよう
struct A { std::string name() const { return "A!"; } };
struct B { std::string name() const { return "B!"; } };
struct C { std::string name() const { return "C!"; } };
struct D { std::string name() const { return "D!"; } };
struct Printer {
template<class T> void operator()(const T& v) const {
std::cout << v.name() << std::endl;
}
};
void foo()
{
for_each<TypeList<A,B,C,D>::type>::apply( Printer() );
}
// for( v : [A,B,C,D] ) print( v.name() ); ↑ 似てる
// A!
// B!
// C!
// D!
13年7月27日土曜日
リフレクションが無くても
テンプレートでいろいろ出来ちゃう。
しかも多くをコンパイル時に静的に。
boost.mpl には型のためのコンテナ、
イテレータ、アルゴリズムがある。遅
延評価、ラムダなども。正直、あたまおかしい(笑)
13年7月27日土曜日
メタプログラムとは何か?
テンプレートの基礎
テンプレート特殊化
再帰テンプレート
メタ関数
型シーケンス
さいごに
13年7月27日土曜日
新たなパラダイムに出会えたね!
構造化
データ指向
オブジェクト指向
ジェネリック
関数型
・・・
メタプログラミング
13年7月27日土曜日
余談
GoFデザインパターンはオブジェクト指向だ
けか?
例えば Abstract FactoryパターンやVisitor パタ
ーンは、メタプロと相性が良い。
継承でなくポリシとか。
メタプロと関数型?
どちらも状態を持たない
13年7月27日土曜日
まとめ
C++テンプレート機能により、コン
パイル時の処理を書くことが出来る。
ライブラリの実装では多用される。
でも、正直読みにくいし難解。
C++11ではconstexprにより多少ましになっている。
13年7月27日土曜日
おつかれさま!
もうおわり?♡
ふう...
13年7月27日土曜日

More Related Content

What's hot

競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるHideyuki Tanaka
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装MITSUNARI Shigeo
 
最新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による黒魔術入門大樹 小倉
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All ThingsUnityTechnologiesJapan002
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみたSatoshi Sato
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードShigenori Sagawa
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回Tomoya Kawanishi
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Preferred Networks
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解MITSUNARI Shigeo
 
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-Takuya Akiba
 
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Hiro H.
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチンyohhoy
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメYoji Kanno
 

What's hot (20)

競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
 
最新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による黒魔術入門
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみた
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
 
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
 
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
 

Viewers also liked

Boostのあるプログラミング生活
Boostのあるプログラミング生活Boostのあるプログラミング生活
Boostのあるプログラミング生活Akira Takahashi
 
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)Yuki Tamura
 
C++入門?
C++入門?C++入門?
C++入門?tsudaa
 
Window 10 楽しい使い方
Window 10 楽しい使い方 Window 10 楽しい使い方
Window 10 楽しい使い方 Takae Sakushima
 
Windows 10 フォローアップ講座
Windows 10 フォローアップ講座Windows 10 フォローアップ講座
Windows 10 フォローアップ講座Takae Sakushima
 
エクストリームC++11/14プログラミング
エクストリームC++11/14プログラミングエクストリームC++11/14プログラミング
エクストリームC++11/14プログラミングegtra
 
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用までTemplate Meta Programming入門から応用まで
Template Meta Programming入門から応用までyoshihikoozaki5
 
Semi-Supervised Classification with Graph Convolutional Networks @ICLR2017読み会
Semi-Supervised Classification with Graph Convolutional Networks @ICLR2017読み会Semi-Supervised Classification with Graph Convolutional Networks @ICLR2017読み会
Semi-Supervised Classification with Graph Convolutional Networks @ICLR2017読み会Eiji Sekiya
 
ICLR2017読み会 Data Noising as Smoothing in Neural Network Language Models @Dena
ICLR2017読み会 Data Noising as Smoothing in Neural Network Language Models @DenaICLR2017読み会 Data Noising as Smoothing in Neural Network Language Models @Dena
ICLR2017読み会 Data Noising as Smoothing in Neural Network Language Models @DenaTakanori Nakai
 
[ICLR2017読み会 @ DeNA] ICLR2017紹介
[ICLR2017読み会 @ DeNA] ICLR2017紹介[ICLR2017読み会 @ DeNA] ICLR2017紹介
[ICLR2017読み会 @ DeNA] ICLR2017紹介Takeru Miyato
 
言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-
言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-
言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-Takahiro Kubo
 
ICLR読み会 奥村純 20170617
ICLR読み会 奥村純 20170617ICLR読み会 奥村純 20170617
ICLR読み会 奥村純 20170617Jun Okumura
 

Viewers also liked (18)

C++ Presentation
C++ PresentationC++ Presentation
C++ Presentation
 
C++14 Overview
C++14 OverviewC++14 Overview
C++14 Overview
 
Boostのあるプログラミング生活
Boostのあるプログラミング生活Boostのあるプログラミング生活
Boostのあるプログラミング生活
 
C++の黒魔術
C++の黒魔術C++の黒魔術
C++の黒魔術
 
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)
 
C++入門?
C++入門?C++入門?
C++入門?
 
Window 10 楽しい使い方
Window 10 楽しい使い方 Window 10 楽しい使い方
Window 10 楽しい使い方
 
Windows 10 フォローアップ講座
Windows 10 フォローアップ講座Windows 10 フォローアップ講座
Windows 10 フォローアップ講座
 
エクストリームC++11/14プログラミング
エクストリームC++11/14プログラミングエクストリームC++11/14プログラミング
エクストリームC++11/14プログラミング
 
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用までTemplate Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
 
Semi-Supervised Classification with Graph Convolutional Networks @ICLR2017読み会
Semi-Supervised Classification with Graph Convolutional Networks @ICLR2017読み会Semi-Supervised Classification with Graph Convolutional Networks @ICLR2017読み会
Semi-Supervised Classification with Graph Convolutional Networks @ICLR2017読み会
 
ICLR2017読み会 Data Noising as Smoothing in Neural Network Language Models @Dena
ICLR2017読み会 Data Noising as Smoothing in Neural Network Language Models @DenaICLR2017読み会 Data Noising as Smoothing in Neural Network Language Models @Dena
ICLR2017読み会 Data Noising as Smoothing in Neural Network Language Models @Dena
 
[ICLR2017読み会 @ DeNA] ICLR2017紹介
[ICLR2017読み会 @ DeNA] ICLR2017紹介[ICLR2017読み会 @ DeNA] ICLR2017紹介
[ICLR2017読み会 @ DeNA] ICLR2017紹介
 
医療データ解析界隈から見たICLR2017
医療データ解析界隈から見たICLR2017医療データ解析界隈から見たICLR2017
医療データ解析界隈から見たICLR2017
 
言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-
言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-
言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-
 
ICLR読み会 奥村純 20170617
ICLR読み会 奥村純 20170617ICLR読み会 奥村純 20170617
ICLR読み会 奥村純 20170617
 
170614 iclr reading-public
170614 iclr reading-public170614 iclr reading-public
170614 iclr reading-public
 
Q prop
Q propQ prop
Q prop
 

Similar to C++ Template Meta Programming の紹介@社内勉強会

C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編道化師 堂華
 
Learning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.GeomtryLearning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.GeomtryAkira Takahashi
 
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話Masanori Masui
 
今から始める Lens/Prism
今から始める Lens/Prism今から始める Lens/Prism
今から始める Lens/PrismNaoki Aoyama
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成Akineko Shimizu
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„和弘 井之上
 
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部Kiyoshi Ogawa
 
C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料真一 北原
 
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らないdigitalghost
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんかcch-robo
 
Parse.comと始めるBackbone.js入門(jscafe7)
Parse.comと始めるBackbone.js入門(jscafe7)Parse.comと始めるBackbone.js入門(jscafe7)
Parse.comと始めるBackbone.js入門(jscafe7)Ryuma Tsukano
 
Lambda in template_final
Lambda in template_finalLambda in template_final
Lambda in template_finalCryolite
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッドKohsuke Yuasa
 
Boost.Flyweight
Boost.FlyweightBoost.Flyweight
Boost.Flyweightgintenlabo
 

Similar to C++ Template Meta Programming の紹介@社内勉強会 (20)

C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編
 
Learning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.GeomtryLearning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.Geomtry
 
Emcjp item21
Emcjp item21Emcjp item21
Emcjp item21
 
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話
 
What is template
What is templateWhat is template
What is template
 
今から始める Lens/Prism
今から始める Lens/Prism今から始める Lens/Prism
今から始める Lens/Prism
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„
 
More C++11
More C++11More C++11
More C++11
 
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
 
C++0x総復習
C++0x総復習C++0x総復習
C++0x総復習
 
C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料
 
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんか
 
C++0x concept
C++0x conceptC++0x concept
C++0x concept
 
Parse.comと始めるBackbone.js入門(jscafe7)
Parse.comと始めるBackbone.js入門(jscafe7)Parse.comと始めるBackbone.js入門(jscafe7)
Parse.comと始めるBackbone.js入門(jscafe7)
 
Lambda in template_final
Lambda in template_finalLambda in template_final
Lambda in template_final
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
 
Boost.Flyweight
Boost.FlyweightBoost.Flyweight
Boost.Flyweight
 
emc++ chapter32
emc++ chapter32emc++ chapter32
emc++ chapter32
 

More from Akihiko Matuura

アーキテクチャパターンの紹介
アーキテクチャパターンの紹介アーキテクチャパターンの紹介
アーキテクチャパターンの紹介Akihiko Matuura
 
Go 言語を語ってみるか
Go 言語を語ってみるかGo 言語を語ってみるか
Go 言語を語ってみるかAkihiko Matuura
 
マルチコア時代の並列プログラミング
マルチコア時代の並列プログラミングマルチコア時代の並列プログラミング
マルチコア時代の並列プログラミングAkihiko Matuura
 

More from Akihiko Matuura (6)

アーキテクチャパターンの紹介
アーキテクチャパターンの紹介アーキテクチャパターンの紹介
アーキテクチャパターンの紹介
 
Go 言語を語ってみるか
Go 言語を語ってみるかGo 言語を語ってみるか
Go 言語を語ってみるか
 
boost and c++11
boost and c++11boost and c++11
boost and c++11
 
Objectie-C de ラムダ
Objectie-C de ラムダObjectie-C de ラムダ
Objectie-C de ラムダ
 
マルチコア時代の並列プログラミング
マルチコア時代の並列プログラミングマルチコア時代の並列プログラミング
マルチコア時代の並列プログラミング
 
Open Business Model
Open Business ModelOpen Business Model
Open Business Model
 

Recently uploaded

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
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
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 

Recently uploaded (10)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
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
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 

C++ Template Meta Programming の紹介@社内勉強会