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

RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpsonickun
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 
x86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTx86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTtakesako
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
【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
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチンyohhoy
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法Takuya Akiba
 
圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナドYoshihiro Mizoguchi
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.jsYoshiiro Ueno
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるHideyuki Tanaka
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexprGenya Murakami
 
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてカスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてalwei
 
新しい並列for構文のご提案
新しい並列for構文のご提案新しい並列for構文のご提案
新しい並列for構文のご提案yohhoy
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 

What's hot (20)

RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
Pietのエディタを作った話
Pietのエディタを作った話Pietのエディタを作った話
Pietのエディタを作った話
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 
x86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTx86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNT
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
【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
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
Map
MapMap
Map
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
 
圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてカスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
 
新しい並列for構文のご提案
新しい並列for構文のご提案新しい並列for構文のご提案
新しい並列for構文のご提案
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 

Viewers also liked

Boostのあるプログラミング生活
Boostのあるプログラミング生活Boostのあるプログラミング生活
Boostのあるプログラミング生活Akira Takahashi
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみたSatoshi Sato
 
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 (19)

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

最新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
 
アーキテクチャパターンの紹介
アーキテクチャパターンの紹介アーキテクチャパターンの紹介
アーキテクチャパターンの紹介Akihiko Matuura
 
Go 言語を語ってみるか
Go 言語を語ってみるかGo 言語を語ってみるか
Go 言語を語ってみるかAkihiko Matuura
 
マルチコア時代の並列プログラミング
マルチコア時代の並列プログラミングマルチコア時代の並列プログラミング
マルチコア時代の並列プログラミングAkihiko Matuura
 

More from Akihiko Matuura (7)

最新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月)
 
アーキテクチャパターンの紹介
アーキテクチャパターンの紹介アーキテクチャパターンの紹介
アーキテクチャパターンの紹介
 
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

論文紹介: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
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
新人研修 後半 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
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
論文紹介: 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
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 

Recently uploaded (11)

論文紹介: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
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 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...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: 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
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

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