Submit Search
C++ Template Metaprogramming
5 likes
5,147 views
Akira Takahashi
1 of 11
Download now
Downloaded 48 times
1
2
3
4
5
6
7
8
9
10
11
More Related Content
PPTX
Functions in c
sunila tharagaturi
PPT
Patrons de creation
omri med
PPTX
Arrays In C Language
Surbhi Yadav
PDF
Effective Modern C++ 勉強会#1 Item3,4
Takashi Hoshino
PDF
Hot C++: Rvalue References And Move Semantics
Andrey Upadyshev
PDF
Constexpr 中3女子テクニック
Genya Murakami
PDF
12 分くらいで知るLuaVM
Yuki Tamura
PDF
itft-Decision making and branching in java
Atul Sehdev
Functions in c
sunila tharagaturi
Patrons de creation
omri med
Arrays In C Language
Surbhi Yadav
Effective Modern C++ 勉強会#1 Item3,4
Takashi Hoshino
Hot C++: Rvalue References And Move Semantics
Andrey Upadyshev
Constexpr 中3女子テクニック
Genya Murakami
12 分くらいで知るLuaVM
Yuki Tamura
itft-Decision making and branching in java
Atul Sehdev
What's hot
(20)
PPTX
Introduction à l’orienté objet en Python
Abdoulaye Dieng
PPT
Constructor
poonamchopra7975
PDF
POO Java Chapitre 1 Classe & Objet
Mouna Torjmen
PPTX
Pointers in c++
Rajat Busheheri
DOCX
Tp1 compte rendu en langage c
Ebrima NJIE
PDF
中3女子が狂える本当に気持ちのいい constexpr
Genya Murakami
PDF
Pythonと型チェッカー
Tetsuya Morimoto
PDF
C++でできる!OS自作入門
uchan_nos
PDF
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
PPT
Runnable interface.34
myrajendra
PDF
Suphx: Mastering Mahjong with Deep Reinforcement Learning
harmonylab
PDF
Twitterのsnowflakeについて
moai kids
PDF
templateとautoの型推論
MITSUNARI Shigeo
PDF
Introduction à Python - Achraf Kacimi El Hassani
Shellmates
PPTX
Network miner 使ってみた
彰 村地
PDF
Django best practices for logging and signals
flywindy
PDF
Ch 01 poo
Yassine Badri
PPTX
Introduction à JavaScript
Abdoulaye Dieng
PDF
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
PDF
Ponteiros e Alocação Dinâmica
Eduardo Oliveira
Introduction à l’orienté objet en Python
Abdoulaye Dieng
Constructor
poonamchopra7975
POO Java Chapitre 1 Classe & Objet
Mouna Torjmen
Pointers in c++
Rajat Busheheri
Tp1 compte rendu en langage c
Ebrima NJIE
中3女子が狂える本当に気持ちのいい constexpr
Genya Murakami
Pythonと型チェッカー
Tetsuya Morimoto
C++でできる!OS自作入門
uchan_nos
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
Runnable interface.34
myrajendra
Suphx: Mastering Mahjong with Deep Reinforcement Learning
harmonylab
Twitterのsnowflakeについて
moai kids
templateとautoの型推論
MITSUNARI Shigeo
Introduction à Python - Achraf Kacimi El Hassani
Shellmates
Network miner 使ってみた
彰 村地
Django best practices for logging and signals
flywindy
Ch 01 poo
Yassine Badri
Introduction à JavaScript
Abdoulaye Dieng
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
Ponteiros e Alocação Dinâmica
Eduardo Oliveira
Ad
Viewers also liked
(20)
PDF
Template Meta Programming入門から応用まで
yoshihikoozaki5
PDF
エクストリームC++11/14プログラミング
egtra
PDF
すごい constexpr たのしくレイトレ!
Genya Murakami
PDF
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Genya Murakami
PDF
C++0x Variadic Type List
Akira Takahashi
PDF
Boostのあるプログラミング生活
Akira Takahashi
PDF
boost and c++11
Akihiko Matuura
PDF
中3女子でもわかる constexpr
Genya Murakami
PDF
C++1z draft
Akira Takahashi
PDF
Lisp Meet Up #25, 8-bit PIC マイコン用ネイティブコンパイラの作成
masayukitakagi
PDF
What is template
Akira Takahashi
PDF
More C++11
京大 マイコンクラブ
PDF
Boost.SIMD
Akira Takahashi
PDF
C++でCプリプロセッサを作ったり速くしたりしたお話
Kinuko Yasuda
PDF
ゲーム開発者のための C++11/C++14
Ryo Suzuki
PDF
闇魔術を触ってみた
Satoshi Sato
PDF
C++14 Overview
Akira Takahashi
PDF
C++の黒魔術
Daichi OBINATA
PDF
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
PDF
C++の話(本当にあった怖い話)
Yuki Tamura
Template Meta Programming入門から応用まで
yoshihikoozaki5
エクストリームC++11/14プログラミング
egtra
すごい constexpr たのしくレイトレ!
Genya Murakami
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Genya Murakami
C++0x Variadic Type List
Akira Takahashi
Boostのあるプログラミング生活
Akira Takahashi
boost and c++11
Akihiko Matuura
中3女子でもわかる constexpr
Genya Murakami
C++1z draft
Akira Takahashi
Lisp Meet Up #25, 8-bit PIC マイコン用ネイティブコンパイラの作成
masayukitakagi
What is template
Akira Takahashi
More C++11
京大 マイコンクラブ
Boost.SIMD
Akira Takahashi
C++でCプリプロセッサを作ったり速くしたりしたお話
Kinuko Yasuda
ゲーム開発者のための C++11/C++14
Ryo Suzuki
闇魔術を触ってみた
Satoshi Sato
C++14 Overview
Akira Takahashi
C++の黒魔術
Daichi OBINATA
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
C++の話(本当にあった怖い話)
Yuki Tamura
Ad
Similar to C++ Template Metaprogramming
(13)
PDF
C++0x concept
Akira Takahashi
PDF
C++0x 言語の未来を語る
Akira Takahashi
PPTX
Lambda in template_final
Cryolite
PPTX
ナウなヤングにバカうけのイカしたタグ付き共用体
digitalghost
PDF
Replace Output Iterator and Extend Range JP
Akira Takahashi
PDF
Python と型ヒント (Type Hints)
Tetsuya Morimoto
PDF
わんくま同盟大阪勉強会#61
TATSUYA HAYAMIZU
PDF
boost tour 1.48.0 all
Akira Takahashi
PDF
constexpr idioms
fimbul
PDF
Boost tour 1_40_0
Akira Takahashi
PDF
Emcpp item31
mitsutaka_takeda
PDF
Emcjp item21
MITSUNARI Shigeo
PDF
拡張可能でprintfっぽい書式指定ができて書式指定文字列と引数をコンパイル時に検証できる文字列フォーマット関数を作った
digitalghost
C++0x concept
Akira Takahashi
C++0x 言語の未来を語る
Akira Takahashi
Lambda in template_final
Cryolite
ナウなヤングにバカうけのイカしたタグ付き共用体
digitalghost
Replace Output Iterator and Extend Range JP
Akira Takahashi
Python と型ヒント (Type Hints)
Tetsuya Morimoto
わんくま同盟大阪勉強会#61
TATSUYA HAYAMIZU
boost tour 1.48.0 all
Akira Takahashi
constexpr idioms
fimbul
Boost tour 1_40_0
Akira Takahashi
Emcpp item31
mitsutaka_takeda
Emcjp item21
MITSUNARI Shigeo
拡張可能でprintfっぽい書式指定ができて書式指定文字列と引数をコンパイル時に検証できる文字列フォーマット関数を作った
digitalghost
More from Akira Takahashi
(20)
PPTX
Cpp20 overview language features
Akira Takahashi
PDF
Cppmix 02
Akira Takahashi
PPTX
Cppmix 01
Akira Takahashi
PDF
Modern C++ Learning
Akira Takahashi
PDF
cpprefjp documentation
Akira Takahashi
PDF
Boost tour 1_61_0 merge
Akira Takahashi
PDF
Boost tour 1_61_0
Akira Takahashi
PDF
error handling using expected
Akira Takahashi
PDF
Boost tour 1.60.0 merge
Akira Takahashi
PDF
Boost tour 1.60.0
Akira Takahashi
PDF
Boost container feature
Akira Takahashi
PDF
Boost Tour 1_58_0 merge
Akira Takahashi
PDF
Boost Tour 1_58_0
Akira Takahashi
PDF
C++14 solve explicit_default_constructor
Akira Takahashi
PDF
C++14 enum hash
Akira Takahashi
PDF
Multi paradigm design
Akira Takahashi
PDF
Start Concurrent
Akira Takahashi
PDF
Programmer mind
Akira Takahashi
PDF
Boost.Study 14 Opening
Akira Takahashi
PDF
Executors and schedulers
Akira Takahashi
Cpp20 overview language features
Akira Takahashi
Cppmix 02
Akira Takahashi
Cppmix 01
Akira Takahashi
Modern C++ Learning
Akira Takahashi
cpprefjp documentation
Akira Takahashi
Boost tour 1_61_0 merge
Akira Takahashi
Boost tour 1_61_0
Akira Takahashi
error handling using expected
Akira Takahashi
Boost tour 1.60.0 merge
Akira Takahashi
Boost tour 1.60.0
Akira Takahashi
Boost container feature
Akira Takahashi
Boost Tour 1_58_0 merge
Akira Takahashi
Boost Tour 1_58_0
Akira Takahashi
C++14 solve explicit_default_constructor
Akira Takahashi
C++14 enum hash
Akira Takahashi
Multi paradigm design
Akira Takahashi
Start Concurrent
Akira Takahashi
Programmer mind
Akira Takahashi
Boost.Study 14 Opening
Akira Takahashi
Executors and schedulers
Akira Takahashi
C++ Template Metaprogramming
1.
C++ テンプレートメタプログラミング
高橋晶(アキラ) ブログ:「Faith and Brave – C++で遊ぼう」 http://d.hatena.ne.jp/faith_and_brave/
2.
はじめに Q.テンプレートメタプログラミングってなんぞ? A.テンプレートのインスタンス化を利用して コンパイル時に評価されるプログラムを書こうぜ!
っていうパラダイム
3.
メタ関数 • コンパイル時に評価される関数 template
<class T> // Tがパラメータ struct identity { typedef T type; // typeが戻り値 }; identity<int>::type i; // int i; テンプレートパラメータを関数のパラメータ、 入れ子型(nested-type)や クラス内定数(static const T)を関数の戻り値を見なす。
4.
特殊化で型特性の判別と条件分岐 テンプレートの特殊化を使って、 型がどんな特性を持ってるのかを判別する 以下はTがvoidかどうかを判別するメタ関数 template <class
T> struct is_void { // void以外だったらfalseを返す static const bool value = false; }; template <> struct is_void<void> { // voidだったらtrueを返す static const bool value = true; }; bool a = is_void<int>::value; // bool a = false; bool b = is_void<void>::value; // bool b = true;
5.
部分特殊化で型特性の判別 • 部分特殊化使った場合。
パターンマッチみたいなもん。 template <class T> struct is_pointer { // ポインタ以外はfalseを返す static const bool value = false; }; template <class T> struct is_pointer<T*> { // ポインタならtrueを返す static const bool value = true; }; bool a = is_pointer<int>::value; // bool a = false; bool b = is_pointer<int*>::value; // bool b = true;
6.
型を修飾する • Tを受け取ってT*を返すメタ関数 template
<class T> struct add_pointer { typedef T* type; }; add_pointer<int>::type p; // int* p; add_pointer<add_pointer<int>::type>::type pp; // int** pp;
7.
再帰テンプレート • メタ関数がメタ関数自身を呼ぶことによって
再帰によるループを表現する template <class T, int N> struct add_pointer { typedef typename add_pointer<T*, N-1>::type type; }; template <class T> struct add_pointer<T, 0> { // 再帰の終了条件 typedef T type; }; add_pointer<int, 5> p; // int***** p;
8.
応用例1 : コンパイル時if文(型の選択)
テンプレートパラメータで条件式をbool値で受け取って パラメータがtrueの場合の型、falseの場合の型を選択する template <bool Cond, class Then, class Else> struct if_c; template <class Then, class Else> struct if_c<true, Then, Else> { typedef Then type; }; template <class Then, class Else> struct if_c<false, Then, Else> { typedef Else type; }; if_c<true, int, char>::type → int if_c<false, int, char>::type → char
9.
応用例2 :
コンテナ/配列からイテレータ/ポインタの型を取り出す template <class Range> struct range_iterator { // 配列以外だったらRange::iterator型を返す typedef typename Range::iterator type; }; template <class T, int N> struct range_iterator<T[N]> { // 配列だったらT*型を返す typedef T* type; }; template <class Range> void foo(Range& r) { typedef typename range_iterator<Range>::type Iterator; } vector<int> v; int ar[3]; foo(v); // Iteratorの型はvector<int>::iteratorになる foo(ar); // Iteratorの型はint*になる
10.
応用例3:
型のシグニチャから部分的に型を抜き出す template <class Signature> struct argument_of; template <class R, class Arg> struct argument_of<R(Arg)> { // 型がR(Arg)の形になってたら typedef R result_type; // 戻り値の型を取り出す typedef Arg argument_type; // 引数の型を取り出す }; typedef argument_of<int(double)>::result_type result; // int typedef argument_of<int(double)>::argument_type argument; // double boost::result_ofで関数オブジェクトの戻り値の型を取得するときに使える
11.
チューリング完全 特殊化によって条件分岐を表現し、 再帰テンプレートによってループを表現できる これらのことから、C++テンプレートは ほぼ(※)チューリング完全だと言われてるみたい。 つまり、コンパイル時に全てのアルゴリズムを解くことができる。 ※再帰的に入れ子にされたテンプレートの インスタンス化は17回までは保証されてる。 『C++ Templates
are Turing Complete』 http://ubiety.uwaterloo.ca/~tveldhui/papers/2003/turing.pdf
Download