Movatterモバイル変換
[0]
ホーム
URL:
画像なし
夜間モード
Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Akihiko Matuura
PDF, PPTX
9,520 views
C++ Template Meta Programming の紹介@社内勉強会
Technology
◦
Read more
9
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 59
2
/ 59
3
/ 59
4
/ 59
5
/ 59
6
/ 59
7
/ 59
8
/ 59
9
/ 59
10
/ 59
11
/ 59
12
/ 59
13
/ 59
14
/ 59
15
/ 59
16
/ 59
17
/ 59
18
/ 59
19
/ 59
20
/ 59
21
/ 59
22
/ 59
23
/ 59
24
/ 59
25
/ 59
26
/ 59
27
/ 59
28
/ 59
29
/ 59
30
/ 59
31
/ 59
32
/ 59
33
/ 59
34
/ 59
35
/ 59
36
/ 59
37
/ 59
38
/ 59
39
/ 59
40
/ 59
41
/ 59
42
/ 59
43
/ 59
44
/ 59
45
/ 59
46
/ 59
47
/ 59
48
/ 59
49
/ 59
50
/ 59
51
/ 59
52
/ 59
53
/ 59
54
/ 59
55
/ 59
56
/ 59
57
/ 59
58
/ 59
59
/ 59
Recommended
PPTX
最新C++事情 C++14-C++20 (2018年10月)
by
Akihiko Matuura
PDF
闇魔術を触ってみた
by
Satoshi Sato
PDF
Template Meta Programming入門から応用まで
by
yoshihikoozaki5
PDF
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
PDF
組み込みでこそC++を使う10の理由
by
kikairoya
PDF
クロージャデザインパターン
by
Moriharu Ohzu
PPTX
Map
by
kikairoya
PPTX
BoostAsioで可読性を求めるのは間違っているだろうか
by
Yuki Miyatake
PDF
C++コミュニティーの中心でC++をDISる
by
Hideyuki Tanaka
PPTX
C++0x総復習
by
道化師 堂華
PDF
中3女子が狂える本当に気持ちのいい constexpr
by
Genya Murakami
PDF
Pfi Seminar 2010 1 7
by
Preferred Networks
PDF
オブジェクト指向できていますか?
by
Moriharu Ohzu
PDF
C++14 Overview
by
Akira Takahashi
PDF
constexpr idioms
by
fimbul
PPTX
競技プログラミングのためのC++入門
by
natrium11321
PDF
C++11概要 ライブラリ編
by
egtra
PDF
C++ Template Metaprogramming
by
Akira Takahashi
PDF
F#入門 ~関数プログラミングとは何か~
by
Nobuhisa Koizumi
PDF
templateとautoの型推論
by
MITSUNARI Shigeo
PPTX
Visual C++で使えるC++11
by
nekko1119
PDF
プログラムの処方箋~健康なコードと病んだコード
by
Shigenori Sagawa
ODP
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
by
勝成 鈴江
PDF
不遇の標準ライブラリ - valarray
by
Ryosuke839
PDF
Emcpp item31
by
mitsutaka_takeda
PDF
C++ ポインタ ブートキャンプ
by
Kohsuke Yuasa
PDF
Emcjp item21
by
MITSUNARI Shigeo
PDF
Unity2015_No10_~UGUI&Audio~
by
CHY72
PDF
Boostのあるプログラミング生活
by
Akira Takahashi
PDF
C++の話(本当にあった怖い話)
by
Yuki Tamura
More Related Content
PPTX
最新C++事情 C++14-C++20 (2018年10月)
by
Akihiko Matuura
PDF
闇魔術を触ってみた
by
Satoshi Sato
PDF
Template Meta Programming入門から応用まで
by
yoshihikoozaki5
PDF
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
PDF
組み込みでこそC++を使う10の理由
by
kikairoya
PDF
クロージャデザインパターン
by
Moriharu Ohzu
PPTX
Map
by
kikairoya
PPTX
BoostAsioで可読性を求めるのは間違っているだろうか
by
Yuki Miyatake
最新C++事情 C++14-C++20 (2018年10月)
by
Akihiko Matuura
闇魔術を触ってみた
by
Satoshi Sato
Template Meta Programming入門から応用まで
by
yoshihikoozaki5
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
組み込みでこそC++を使う10の理由
by
kikairoya
クロージャデザインパターン
by
Moriharu Ohzu
Map
by
kikairoya
BoostAsioで可読性を求めるのは間違っているだろうか
by
Yuki Miyatake
What's hot
PDF
C++コミュニティーの中心でC++をDISる
by
Hideyuki Tanaka
PPTX
C++0x総復習
by
道化師 堂華
PDF
中3女子が狂える本当に気持ちのいい constexpr
by
Genya Murakami
PDF
Pfi Seminar 2010 1 7
by
Preferred Networks
PDF
オブジェクト指向できていますか?
by
Moriharu Ohzu
PDF
C++14 Overview
by
Akira Takahashi
PDF
constexpr idioms
by
fimbul
PPTX
競技プログラミングのためのC++入門
by
natrium11321
PDF
C++11概要 ライブラリ編
by
egtra
PDF
C++ Template Metaprogramming
by
Akira Takahashi
PDF
F#入門 ~関数プログラミングとは何か~
by
Nobuhisa Koizumi
PDF
templateとautoの型推論
by
MITSUNARI Shigeo
PPTX
Visual C++で使えるC++11
by
nekko1119
PDF
プログラムの処方箋~健康なコードと病んだコード
by
Shigenori Sagawa
ODP
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
by
勝成 鈴江
PDF
不遇の標準ライブラリ - valarray
by
Ryosuke839
PDF
Emcpp item31
by
mitsutaka_takeda
PDF
C++ ポインタ ブートキャンプ
by
Kohsuke Yuasa
PDF
Emcjp item21
by
MITSUNARI Shigeo
PDF
Unity2015_No10_~UGUI&Audio~
by
CHY72
C++コミュニティーの中心でC++をDISる
by
Hideyuki Tanaka
C++0x総復習
by
道化師 堂華
中3女子が狂える本当に気持ちのいい constexpr
by
Genya Murakami
Pfi Seminar 2010 1 7
by
Preferred Networks
オブジェクト指向できていますか?
by
Moriharu Ohzu
C++14 Overview
by
Akira Takahashi
constexpr idioms
by
fimbul
競技プログラミングのためのC++入門
by
natrium11321
C++11概要 ライブラリ編
by
egtra
C++ Template Metaprogramming
by
Akira Takahashi
F#入門 ~関数プログラミングとは何か~
by
Nobuhisa Koizumi
templateとautoの型推論
by
MITSUNARI Shigeo
Visual C++で使えるC++11
by
nekko1119
プログラムの処方箋~健康なコードと病んだコード
by
Shigenori Sagawa
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
by
勝成 鈴江
不遇の標準ライブラリ - valarray
by
Ryosuke839
Emcpp item31
by
mitsutaka_takeda
C++ ポインタ ブートキャンプ
by
Kohsuke Yuasa
Emcjp item21
by
MITSUNARI Shigeo
Unity2015_No10_~UGUI&Audio~
by
CHY72
Viewers also liked
PDF
Boostのあるプログラミング生活
by
Akira Takahashi
PDF
C++の話(本当にあった怖い話)
by
Yuki Tamura
PDF
C++の黒魔術
by
Daichi OBINATA
PDF
エクストリームC++11/14プログラミング
by
egtra
PDF
170614 iclr reading-public
by
Katsuhiko Ishiguro
PDF
ICLR2017読み会 Data Noising as Smoothing in Neural Network Language Models @Dena
by
Takanori Nakai
PDF
[ICLR2017読み会 @ DeNA] ICLR2017紹介
by
Takeru Miyato
PDF
ICLR読み会 奥村純 20170617
by
Jun Okumura
PDF
言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-
by
Takahiro Kubo
PPTX
C++ Presentation
by
Carson Wilber
PDF
C++入門?
by
tsudaa
PDF
Semi-Supervised Classification with Graph Convolutional Networks @ICLR2017読み会
by
Eiji Sekiya
PPTX
Windows 10 フォローアップ講座
by
Takae Sakushima
PPTX
Window 10 楽しい使い方
by
Takae Sakushima
PDF
Q prop
by
Reiji Hatsugai
PPTX
医療データ解析界隈から見たICLR2017
by
RIKEN, Medical Sciences Innovation Hub Program (MIH)
Boostのあるプログラミング生活
by
Akira Takahashi
C++の話(本当にあった怖い話)
by
Yuki Tamura
C++の黒魔術
by
Daichi OBINATA
エクストリームC++11/14プログラミング
by
egtra
170614 iclr reading-public
by
Katsuhiko Ishiguro
ICLR2017読み会 Data Noising as Smoothing in Neural Network Language Models @Dena
by
Takanori Nakai
[ICLR2017読み会 @ DeNA] ICLR2017紹介
by
Takeru Miyato
ICLR読み会 奥村純 20170617
by
Jun Okumura
言葉のもつ広がりを、モデルの学習に活かそう -one-hot to distribution in language modeling-
by
Takahiro Kubo
C++ Presentation
by
Carson Wilber
C++入門?
by
tsudaa
Semi-Supervised Classification with Graph Convolutional Networks @ICLR2017読み会
by
Eiji Sekiya
Windows 10 フォローアップ講座
by
Takae Sakushima
Window 10 楽しい使い方
by
Takae Sakushima
Q prop
by
Reiji Hatsugai
医療データ解析界隈から見たICLR2017
by
RIKEN, Medical Sciences Innovation Hub Program (MIH)
Similar to C++ Template Meta Programming の紹介@社内勉強会
PDF
C++勉強会in広島プレゼン資料
by
真一 北原
PDF
C++ template-primer
by
Kohsuke Yuasa
PDF
Boost Tour 1.50.0 All
by
Akira Takahashi
PDF
テンプレートメタプログラミング as 式
by
digitalghost
PDF
中3女子でもわかる constexpr
by
Genya Murakami
PDF
リテラル文字列型までの道
by
Satoshi Sato
PDF
Boost Fusion Library
by
Akira Takahashi
PDF
Constexpr 中3女子テクニック
by
Genya Murakami
PDF
Boost Tour 1_58_0 merge
by
Akira Takahashi
PDF
高位合成におけるC++テンプレートメタプログラミングの効果
by
Kenichiro MITSUDA
PDF
What is template
by
Akira Takahashi
PPTX
Lambda in template_final
by
Cryolite
PDF
わんくま同盟大阪勉強会#61
by
TATSUYA HAYAMIZU
PDF
C++0x 言語の未来を語る
by
Akira Takahashi
PDF
C++ lecture-0
by
sunaemon
PDF
boost tour 1.48.0 all
by
Akira Takahashi
PDF
Metaprogramming
by
mitsutaka_takeda
PDF
Tr18015
by
kikairoya
DOCX
Boost勉強会 #10 ディスカッションまとめ
by
Sigureya
PDF
Tddbc岡山LT
by
Hiroshi Maekawa
C++勉強会in広島プレゼン資料
by
真一 北原
C++ template-primer
by
Kohsuke Yuasa
Boost Tour 1.50.0 All
by
Akira Takahashi
テンプレートメタプログラミング as 式
by
digitalghost
中3女子でもわかる constexpr
by
Genya Murakami
リテラル文字列型までの道
by
Satoshi Sato
Boost Fusion Library
by
Akira Takahashi
Constexpr 中3女子テクニック
by
Genya Murakami
Boost Tour 1_58_0 merge
by
Akira Takahashi
高位合成におけるC++テンプレートメタプログラミングの効果
by
Kenichiro MITSUDA
What is template
by
Akira Takahashi
Lambda in template_final
by
Cryolite
わんくま同盟大阪勉強会#61
by
TATSUYA HAYAMIZU
C++0x 言語の未来を語る
by
Akira Takahashi
C++ lecture-0
by
sunaemon
boost tour 1.48.0 all
by
Akira Takahashi
Metaprogramming
by
mitsutaka_takeda
Tr18015
by
kikairoya
Boost勉強会 #10 ディスカッションまとめ
by
Sigureya
Tddbc岡山LT
by
Hiroshi Maekawa
More from Akihiko Matuura
PDF
マルチコア時代の並列プログラミング
by
Akihiko Matuura
PDF
アーキテクチャパターンの紹介
by
Akihiko Matuura
PDF
Objectie-C de ラムダ
by
Akihiko Matuura
PDF
boost and c++11
by
Akihiko Matuura
PPTX
Go 言語を語ってみるか
by
Akihiko Matuura
KEY
Open Business Model
by
Akihiko Matuura
マルチコア時代の並列プログラミング
by
Akihiko Matuura
アーキテクチャパターンの紹介
by
Akihiko Matuura
Objectie-C de ラムダ
by
Akihiko Matuura
boost and c++11
by
Akihiko Matuura
Go 言語を語ってみるか
by
Akihiko Matuura
Open Business Model
by
Akihiko Matuura
C++ Template Meta Programming の紹介@社内勉強会
1.
C++Template MetaProgrammingの、さわりだけ...CORE 北海道カンパニー
勉強会2013/7/26 松浦13年7月27日土曜日
2.
C++テンプレートを使ったメタプログラミングについて紹介します!まあ、そんなのもあるんだー、ふーん、くらいな感じで今日は、13年7月27日土曜日
3.
13年7月27日土曜日
4.
メタプログラムとは何か?テンプレートの基礎テンプレート特殊化再帰テンプレートメタ関数型シーケンスさいごに目次13年7月27日土曜日
5.
メタプログラムとは何か?テンプレートの基礎テンプレート特殊化再帰テンプレートメタ関数型シーケンスさいごに13年7月27日土曜日
6.
ロジックを直接コーディングするのではなく、あるパターンをもったロジックを生成する高位ロジックによってプログラミングを行う方法、またその高位ロジックを定義する方法のこと。........wikipedia13年7月27日土曜日
7.
いみが まったくわからないいやん♡13年7月27日土曜日
8.
プログラムを生成するプログラム、ってことでいいと思うぽよ。ようは13年7月27日土曜日
9.
例えばYACCexpression : 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日土曜日
10.
YACC.y YACC .c13年7月27日土曜日
11.
YACC.y YACC .cドメイン言語(DSL)ホスト言語13年7月27日土曜日
12.
boost.spiritexpr = (
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日土曜日
13.
boost.spirit.cpp13年7月27日土曜日
14.
boost.spirit.cppドメイン言語 ホスト言語13年7月27日土曜日
15.
boost.spirit.cppドメイン言語 ホスト言語EDSL(埋め込みドメイン言語)13年7月27日土曜日
16.
boost.spirit.cppドメイン言語 ホスト言語EDSL(埋め込みドメイン言語)YACC相当のものは?13年7月27日土曜日
17.
boost.spirit.cppドメイン言語 ホスト言語EDSL(埋め込みドメイン言語)YACC相当のものは?テンプレート・メタプログラミング13年7月27日土曜日
18.
なぜC++でメタプロ?別の構文規則を学ぶ必要がない他のメタプロとの相互運用余分な構築ステップ不要品質、再利用、可搬性13年7月27日土曜日
19.
とはいえboost.spiritのような究極のメタプログラミングの話は割愛します。このあとの章では、C++メタプロを支える基本的な部分だけお話します。(ちゃんと話せる自信がないというのはナイショぽよ13年7月27日土曜日
20.
メタプログラムとは何か?テンプレートの基礎テンプレート特殊化再帰テンプレートメタ関数型シーケンスさいごに13年7月27日土曜日
21.
普通のジェネリック// C#List<string> list
= new List<string>();list.add("hoge"); list.add("page");// JavaList<String> list = new ArrayList<String>();list.add("hoge"); list.add("page");//C++list<string> list;list.insert("hoge"); list.insert("page");13年7月27日土曜日
22.
非型テンプレート//C++template<int N>struct pow
{static const int value = N*N;};int n = pow<3>::value; // n = 3*3;13年7月27日土曜日
23.
型の操作ポインタを追加する//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日土曜日
24.
C++テンプレートコンパイル時に計算してしまう(実行時コスト0)。非型テンプレート型操作.....などなど13年7月27日土曜日
25.
メタプログラムとは何か?テンプレートの基礎テンプレート特殊化再帰テンプレートメタ関数型シーケンスさいごに13年7月27日土曜日
26.
add_pointerの例ん??// int* p
= &n;add_pointer<int>::type p1 = &n;// これはエラー:int** p2 = &n;add_pointer<int*>::type p2 = &n;13年7月27日土曜日
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日土曜日
28.
テンプレート特殊化テンプレート特殊化により、コンパイル時に条件分岐を行うことができる。13年7月27日土曜日
29.
コンパイル時 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日土曜日
30.
コンパイル時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日土曜日
31.
C++テンプレートコンパイル時に計算してしまう(実行時コスト0)。非型テンプレート型操作特殊化による条件分岐13年7月27日土曜日
32.
メタプログラムとは何か?テンプレートの基礎テンプレート特殊化再帰テンプレートメタ関数型シーケンスさいごに13年7月27日土曜日
33.
普通に再帰で階乗計算int factorial(int N)
{return N==0 ? 1 : N*factorial(N-1);}int n = factorial(3); // 613年7月27日土曜日
34.
再帰テンプレートで// 階乗を求める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日土曜日
35.
再帰テンプレート再帰テンプレートにより、コンパイル時に繰り返し処理を行うことができる。13年7月27日土曜日
36.
余談C++テンプレートはチューリング完全である(制限:再帰に限界あり)C++ Templates are
Turing Completehttp://ubietylab.net/ubigraph/content/Papers/pdf/CppTuring.pdf13年7月27日土曜日
37.
C++テンプレートコンパイル時に計算してしまう(実行時コスト0)。非型テンプレート型操作特殊化による条件分岐再帰テンプレートによる繰り返し13年7月27日土曜日
38.
このへんからちょっとだけ応用な感じです。ちょっとだけよ♡13年7月27日土曜日
39.
メタプログラムとは何か?テンプレートの基礎テンプレート特殊化再帰テンプレートメタ関数型シーケンスさいごに13年7月27日土曜日
40.
メタ関数とはadd_pointer<int>::type pi;関数名int v
= factorial_t<3>::value;パラメータ 戻り値(型)関数名 パラメータ 戻り値(値)13年7月27日土曜日
41.
高階関数を考えてみようまずは普通のテンプレート関数f(f(x)) の結果を返すtwicetemplate<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); // 213年7月27日土曜日
42.
高階メタ関数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; // 213年7月27日土曜日
43.
メタプログラムとは何か?テンプレートの基礎テンプレート特殊化再帰テンプレートメタ関数型シーケンスさいごに13年7月27日土曜日
44.
こんなことしたいそれぞれの型のインスタンスを用意してメソッドを呼び出したい。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日土曜日
45.
JavaやC#、ObjCあたりのアプローチリフレクションを使う。Classクラスのようなメタクラスの配列を使って動的生成する、とかね。C++のリフレクションは貧弱。どうしよう。13年7月27日土曜日
46.
C++のアプローチメタプログラミングで型のリスト(型シーケンス)を用意し、各型にアクセスする仕掛けを考えてみる。TypeList<A,B,C,D>::type;13年7月27日土曜日
47.
C++のアプローチメタプログラミングで型のリスト(型シーケンス)を用意し、各型にアクセスする仕掛けを考えてみる。TypeList<A,B,C,D>::type;このへんをどうするか??13年7月27日土曜日
48.
型シーケンス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日土曜日
49.
型シーケンス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日土曜日
50.
むずくないよ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日土曜日
51.
あとは繰り返す処理// 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日土曜日
52.
ターミネータ忘れてた!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日土曜日
53.
使ってみよう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日土曜日
54.
リフレクションが無くてもテンプレートでいろいろ出来ちゃう。しかも多くをコンパイル時に静的に。boost.mpl には型のためのコンテナ、イテレータ、アルゴリズムがある。遅延評価、ラムダなども。正直、あたまおかしい(笑)13年7月27日土曜日
55.
メタプログラムとは何か?テンプレートの基礎テンプレート特殊化再帰テンプレートメタ関数型シーケンスさいごに13年7月27日土曜日
56.
新たなパラダイムに出会えたね!構造化データ指向オブジェクト指向ジェネリック関数型・・・メタプログラミング13年7月27日土曜日
57.
余談GoFデザインパターンはオブジェクト指向だけか?例えば Abstract FactoryパターンやVisitor
パターンは、メタプロと相性が良い。継承でなくポリシとか。メタプロと関数型?どちらも状態を持たない13年7月27日土曜日
58.
まとめC++テンプレート機能により、コンパイル時の処理を書くことが出来る。ライブラリの実装では多用される。でも、正直読みにくいし難解。C++11ではconstexprにより多少ましになっている。13年7月27日土曜日
59.
おつかれさま!もうおわり?♡ふう...13年7月27日土曜日
Download
[8]
ページ先頭
©2009-2025
Movatter.jp