Enviar pesquisa
Carregar
Preprocess-time Lambda Expression
•
1 gostou
•
1,121 visualizações
D
digitalghost
Seguir
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 69
Baixar agora
Baixar para ler offline
Recomendados
Boost.python
Boost.python
fate_fox
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体
digitalghost
拡張可能でprintfっぽい書式指定ができて書式指定文字列と引数をコンパイル時に検証できる文字列フォーマット関数を作った
拡張可能でprintfっぽい書式指定ができて書式指定文字列と引数をコンパイル時に検証できる文字列フォーマット関数を作った
digitalghost
Define and expansion of cpp macro
Define and expansion of cpp macro
digitalghost
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
digitalghost
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
digitalghost
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
No skk, no life.
No skk, no life.
digitalghost
Recomendados
Boost.python
Boost.python
fate_fox
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体
digitalghost
拡張可能でprintfっぽい書式指定ができて書式指定文字列と引数をコンパイル時に検証できる文字列フォーマット関数を作った
拡張可能でprintfっぽい書式指定ができて書式指定文字列と引数をコンパイル時に検証できる文字列フォーマット関数を作った
digitalghost
Define and expansion of cpp macro
Define and expansion of cpp macro
digitalghost
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
digitalghost
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
digitalghost
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
No skk, no life.
No skk, no life.
digitalghost
2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
Marius Sescu
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
Expeed Software
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
Pixeldarts
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
marketingartwork
Skeleton Culture Code
Skeleton Culture Code
Skeleton Technologies
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
Neil Kimberley
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
contently
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
Albert Qian
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
Search Engine Journal
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
SpeakerHub
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
Clark Boyd
Getting into the tech field. what next
Getting into the tech field. what next
Tessa Mero
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Lily Ray
How to have difficult conversations
How to have difficult conversations
Rajiv Jayarajah, MAppComm, ACC
Introduction to Data Science
Introduction to Data Science
Christy Abraham Joy
Time Management & Productivity - Best Practices
Time Management & Productivity - Best Practices
Vit Horky
The six step guide to practical project management
The six step guide to practical project management
MindGenius
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
RachelPearson36
Mais conteúdo relacionado
Destaque
2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
Marius Sescu
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
Expeed Software
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
Pixeldarts
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
marketingartwork
Skeleton Culture Code
Skeleton Culture Code
Skeleton Technologies
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
Neil Kimberley
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
contently
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
Albert Qian
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
Search Engine Journal
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
SpeakerHub
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
Clark Boyd
Getting into the tech field. what next
Getting into the tech field. what next
Tessa Mero
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Lily Ray
How to have difficult conversations
How to have difficult conversations
Rajiv Jayarajah, MAppComm, ACC
Introduction to Data Science
Introduction to Data Science
Christy Abraham Joy
Time Management & Productivity - Best Practices
Time Management & Productivity - Best Practices
Vit Horky
The six step guide to practical project management
The six step guide to practical project management
MindGenius
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
RachelPearson36
Destaque
(20)
2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
Skeleton Culture Code
Skeleton Culture Code
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
Getting into the tech field. what next
Getting into the tech field. what next
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
How to have difficult conversations
How to have difficult conversations
Introduction to Data Science
Introduction to Data Science
Time Management & Productivity - Best Practices
Time Management & Productivity - Best Practices
The six step guide to practical project management
The six step guide to practical project management
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Preprocess-time Lambda Expression
1.
λ expression for
PP を作ってみました digitalghost http://d.hatena.ne.jp/DigitalGhost/ http://twitter.com/DecimalBloat
2.
自己紹介 ●きりんさんがすきです。 でもC++のほうがもーっとすきです。 ●プリプロセッサで遊んでます ●実は仕事でC++を使ったことは一度もない ●他の方の発表見てから資料作成余裕でした
3.
今日の話 1.前提 2.この発表に説得力を付ける努力 1.どーきらしきもの 2.簡単な例 3.使い方 1.基本 2.構文糖 4.実用例 1.BOOST_PP_REPEATで 5.その他の話 1.ChaosPreprocessor 2.中途半端に形式的な文法 3.今回のブツ 4.ありがとう
4.
前提
5.
前提 ●ラムダ式をなんとなく知っている
6.
前提 ●ラムダ式をなんとなく知っている ●Boost.Preprocessorのお世話になったことが ある
7.
前提 ●ラムダ式をなんとなく知っている ●Boost.Preprocessorのお世話になったことが ある ●BOOST_PP_ADD相当の機能が作れる (もちろんプリプロセッサで)
8.
この発表に説得力を 付ける努力
9.
どーきらしきもの ●こんなことありませんか?
10.
どーきらしきもの ●こんなことありませんか? ●BOOST_PP_REPEATを使うときステップごとの展 開用マクロをいちいち定義するのめんどくさい
11.
どーきらしきもの ●こんなことありませんか? ●BOOST_PP_REPEATを使うときステップごとの展 開用マクロをいちいち定義するのめんどくさい ●引数がtupleのとき全要素にアクセスするためマクロ を二段構えにするのめんどくさい
12.
どーきらしきもの ●こんなことありませんか? ●BOOST_PP_REPEATを使うときステップごとの展 開用マクロをいちいち定義するのめんどくさい ●引数がtupleのとき全要素にアクセスするためマクロ を二段構えにするのめんどくさい ※なければ何の役にも立たない話なので適当に時 間を潰してください。
13.
どーきらしきもの 例:void fun0() 〜
void fun9()のfowarding declarationを作る
14.
どーきらしきもの 例:void fun0() 〜
void fun9()のfowarding declarationを作る #define FWD_DECL(z, n, d) void BOOST_PP_CAT(d, n)(); BOOST_PP_REPEAT(10, FWD_DECL, fun)
15.
どーきらしきもの 例:void fun0() 〜
void fun9()のfowarding declarationを作る #define FWD_DECL(z, n, d) void BOOST_PP_CAT(d, n)(); BOOST_PP_REPEAT(10, FWD_DECL, fun) 展開結果 void f0(); void f1(); … void f9();
16.
どーきらしきもの 例:void fun0() 〜
void fun9()のfowarding declarationを作る #define FWD_DECL(z, n, d) void BOOST_PP_CAT(d, n)(); BOOST_PP_REPEAT(10, FWD_DECL, fun) この#define FWD_DECLを定義するのが嫌だ 展開結果 void f0(); void f1(); … void f9();
17.
どーきらしきもの 例:void fun0() 〜
void fun9()のfowarding declarationを作る #define FWD_DECL(z, n, d) void BOOST_PP_CAT(d, n)(); BOOST_PP_REPEAT(10, FWD_DECL, fun) この#define FWD_DECLを定義するのが嫌だ ラムダ式使えればいいんじゃね? 展開結果 void f0(); void f1(); … void f9();
18.
どーきらしきもの 例:void fun0() 〜
void fun9()のfowarding declarationを作る #define FWD_DECL(z, n, d) void BOOST_PP_CAT(d, n)(); BOOST_PP_REPEAT(10, FWD_DECL, fun) この#define FWD_DECLを定義するのが嫌だ ラムダ式使えればいいんじゃね? 作ってみました 展開結果 void f0(); void f1(); … void f9();
19.
どーきらしきもの 例:void fun0() 〜
void fun9()のfowarding declarationを作る #define FWD_DECL(z, n, d) void BOOST_PP_CAT(d, n)(); BOOST_PP_REPEAT(10, FWD_DECL, fun) この#define FWD_DECLを定義するのが嫌だ ラムダ式使えればいいんじゃね? 作ってみました ●http://patch-tag.com/r/digitalghost/pplambda/home 展開結果 void f0(); void f1(); … void f9();
20.
簡単な例 さっきのfun0〜fun9をラムダ式で
21.
簡単な例 さっきのfun0〜fun9をラムダ式で BOOST_PP_REPEAT(10, PP_LAMBDA_EVAL_Z, (LAMBDA3 (void) APPLY2(BOOST_PP_CAT)(3_,
2_) (();), fun))
22.
簡単な例 さっきのfun0〜fun9をラムダ式で BOOST_PP_REPEAT(10, PP_LAMBDA_EVAL_Z, (LAMBDA3 (void) APPLY2(BOOST_PP_CAT)(3_,
2_) (();), fun)) ●PP_LAMBDA_EVAL_Zはラムダ式の評価器
23.
簡単な例 さっきのfun0〜fun9をラムダ式で BOOST_PP_REPEAT(10, PP_LAMBDA_EVAL_Z, (LAMBDA3 (void) APPLY2(BOOST_PP_CAT)(3_,
2_) (();), fun)) ●PP_LAMBDA_EVAL_Zはラムダ式の評価器 ●LAMBDA3から(();)までがラムダ式本体
24.
簡単な例 さっきのfun0〜fun9をラムダ式で BOOST_PP_REPEAT(10, PP_LAMBDA_EVAL_Z, (LAMBDA3 (void) APPLY2(BOOST_PP_CAT)(3_,
2_) (();), fun)) ●PP_LAMBDA_EVAL_Zはラムダ式の評価器 ●LAMBDA3から(();)までがラムダ式本体 ●#defineとか最初からいらんかったんや!
25.
使い方
26.
基本1 PP_EVAL_LAMBDA( LAMBDA2 (BOOST_PP_CAT) LPAREN ARG1
COMMA ARG2 RPAREN, (Azniyan, Kawaiinar))
27.
基本1 PP_EVAL_LAMBDA( LAMBDA2 (BOOST_PP_CAT) LPAREN ARG1
COMMA ARG2 RPAREN, (Azniyan, Kawaiinar)) ●PP_EVAL_LAMBDA(expr, params)はラムダ式 の評価器
28.
基本1 PP_EVAL_LAMBDA( LAMBDA2 (BOOST_PP_CAT) LPAREN ARG1
COMMA ARG2 RPAREN, (Azniyan, Kawaiinar)) ●PP_EVAL_LAMBDA(expr, params)はラムダ式 の評価器 ●第一引数がラムダ式
29.
基本1 PP_EVAL_LAMBDA( LAMBDA2 (BOOST_PP_CAT) LPAREN ARG1
COMMA ARG2 RPAREN, (Azniyan, Kawaiinar)) ●PP_EVAL_LAMBDA(expr, params)はラムダ式 の評価器 ●第一引数がラムダ式 ●第二引数はラムダ式の引数
30.
展開すると PP_EVAL_LAMBDA( LAMBDA2 (BOOST_PP_CAT) LPAREN ARG1
COMMA ARG2 RPAREN, (Azniyan, Kawaiinar))
31.
展開すると PP_EVAL_LAMBDA( LAMBDA2 (BOOST_PP_CAT) LPAREN ARG1
COMMA ARG2 RPAREN, (Azniyan, Kawaiinar)) ↓ BOOST_PP_CAT ( Azniyan , Kawaiinar )
32.
展開すると PP_EVAL_LAMBDA( LAMBDA2 (BOOST_PP_CAT) LPAREN ARG1
COMMA ARG2 RPAREN, (Azniyan, Kawaiinar)) ↓ BOOST_PP_CAT ( Azniyan , Kawaiinar ) ↓ AzniyanKawaiinar
33.
展開すると PP_EVAL_LAMBDA( LAMBDA2 (BOOST_PP_CAT) LPAREN ARG1
COMMA ARG2 RPAREN, (Azniyan, Kawaiinar)) ↓ BOOST_PP_CAT ( Azniyan , Kawaiinar ) ↓ AzniyanKawaiinar ※http://twitter.com/azniyan
34.
基本2 ●LAMBDAnは「n引数のラムダ式」という意味 (nは1〜3) ●以下のルール ●(hoge) → hoge ●LPAREN
→ ( ●RPAREN → ) ●COMMA → , ●ARGn → ラムダ式のn個目の引数 の組み合わせ(nは1〜3)
35.
もう一度あずにやんかわいいなあ PP_EVAL_LAMBDA( LAMBDA2 (BOOST_PP_CAT) LPAREN ARG1
COMMA ARG2 RPAREN, (Azniyan, Kawaiinar)) ↓ BOOST_PP_CAT ( Azniyan , Kawaiinar ) ↓ AzniyanKawaiinar
36.
もう一度あずにやんかわいいなあ PP_EVAL_LAMBDA( LAMBDA2 (BOOST_PP_CAT) LPAREN ARG1
COMMA ARG2 RPAREN, (Azniyan, Kawaiinar)) ↓ BOOST_PP_CAT ( Azniyan , Kawaiinar ) ↓ AzniyanKawaiinar LPARENやRPARENを 並べた結果が マクロ呼び出しの形なら それも展開される
37.
LPARENとか書くのめんどくさい…
38.
LPARENとか書くのめんどくさい… ●構文糖あります
39.
LPARENとか書くのめんどくさい… ●構文糖あります ●APPLYn(f)(expr1, expr2, …) =
(f) LPAREN expr1 COMMA expr2 COMMA … RPAREN
40.
LPARENとか書くのめんどくさい… ●構文糖あります ●APPLYn(f)(expr1, expr2, …) =
(f) LPAREN expr1 COMMA expr2 COMMA … RPAREN ●n(expr1, expr2, …) = LPAREN expr1 COMMA expr2 COMMA … RPAREN
41.
LPARENとか書くのめんどくさい… ●構文糖あります ●APPLYn(f)(expr1, expr2, …) =
(f) LPAREN expr1 COMMA expr2 COMMA … RPAREN ●n(expr1, expr2, …) = LPAREN expr1 COMMA expr2 COMMA … RPAREN ※ただしnは1〜3
42.
あずにやん with 構文糖 PP_EVAL_LAMBDA( LAMBDA2 (BOOST_PP_CAT)
LPAREN ARG1 COMMA ARG2 RPAREN, (Azniyan, Kawaiinar))
43.
あずにやん with 構文糖 PP_EVAL_LAMBDA( LAMBDA2 (BOOST_PP_CAT)
LPAREN ARG1 COMMA ARG2 RPAREN, (Azniyan, Kawaiinar)) は、こう書き換えられる
44.
あずにやん with 構文糖 PP_EVAL_LAMBDA( LAMBDA2 (BOOST_PP_CAT)
LPAREN ARG1 COMMA ARG2 RPAREN, (Azniyan, Kawaiinar)) は、こう書き換えられる PP_EVAL_LAMBDA( LAMBDA2 APPLY2(BOOST_PP_CAT) (ARG1, ARG2), (Azniyan, Kawaiinar))
45.
あずにやん with 構文糖 PP_EVAL_LAMBDA( LAMBDA2 (BOOST_PP_CAT)
LPAREN ARG1 COMMA ARG2 RPAREN, (Azniyan, Kawaiinar)) こうも書き変えられる PP_EVAL_LAMBDA( LAMBDA2 (BOOST_PP_CAT) 2(ARG1, ARG2), (Azniyan, Kawaiinar)) ●APPLYを使うより短く書けるけど見た目がキモ い
46.
実用例
47.
BOOST_PP_REPEATで ●導入で登場した例 BOOST_PP_REPEAT(10, PP_LAMBDA_EVAL_Z, (LAMBDA3 (void) APPLY2(BOOST_PP_CAT)(3_,
2_) (();), fun))
48.
BOOST_PP_REPEATで ●導入で登場した例 BOOST_PP_REPEAT(10, PP_LAMBDA_EVAL_Z, (LAMBDA3 (void) APPLY2(BOOST_PP_CAT)(3_,
2_) (();), fun)) ●ポイントは PP_LAMBDA_EVAL_Z
49.
PP_LAMBDA_EVAL_Z ●ラムダ式で繰り返しを書くときに使う、EVALの ラッパ
50.
PP_LAMBDA_EVAL_Z ●ラムダ式で繰り返しを書くときに使う、EVALの ラッパ ●「Z」はBOOST_PP_REPEATの繰り返し用関数 マクロの一つ目の引数に由来
51.
PP_LAMBDA_EVAL_Z ●ラムダ式で繰り返しを書くときに使う、EVALの ラッパ ●「Z」はBOOST_PP_REPEATの繰り返し用関数 マクロの一つ目の引数に由来 ●BOOST_PP_REPEAT_FROM_TO や、 BOOST_PP_ENUMでもこのマクロを使えます
52.
PP_LAMBDA_EVAL_Z ●ラムダ式で繰り返しを書くときに使う、EVALの ラッパ ●「Z」はBOOST_PP_REPEATの繰り返し用関数 マクロの一つ目の引数に由来 ●BOOST_PP_REPEAT_FROM_TO や、 BOOST_PP_ENUMでもこのマクロを使えます ●マジンガーもドラゴンボールも関係ないです
53.
PP_LAMBDA_EVAL_Z #define FWD_DECL(z, n,
d) void BOOST_PP_CAT(d, n)(); BOOST_PP_REPEAT(10, FWD_DECL, fun)
54.
PP_LAMBDA_EVAL_Z #define FWD_DECL(z, n,
d) void BOOST_PP_CAT(d, n)(); BOOST_PP_REPEAT(10, FWD_DECL, fun) BOOST_PP_REPEAT(10, PP_LAMBDA_EVAL_Z, (LAMBDA3 (void) APPLY2(BOOST_PP_CAT)(3_, 2_) (();), fun))
55.
PP_LAMBDA_EVAL_Z #define FWD_DECL(z, n,
d) void BOOST_PP_CAT(d, n)(); BOOST_PP_REPEAT(10, FWD_DECL, fun) BOOST_PP_REPEAT(10, PP_LAMBDA_EVAL_Z, (LAMBDA3 (void) APPLY2(BOOST_PP_CAT)(3_, 2_) (();), fun))
56.
PP_LAMBDA_EVAL_Z #define FWD_DECL(z, n,
d) void BOOST_PP_CAT(d, n)(); BOOST_PP_REPEAT(10, FWD_DECL, fun) BOOST_PP_REPEAT(10, PP_LAMBDA_EVAL_Z, (LAMBDA3 (void) APPLY2(BOOST_PP_CAT)(3_, 2_) (();), fun)) 繰り返し用マクロを EVAL_Zに変更
57.
PP_LAMBDA_EVAL_Z #define FWD_DECL(z, n,
d) void BOOST_PP_CAT(d, n)(); BOOST_PP_REPEAT(10, FWD_DECL, fun) BOOST_PP_REPEAT(10, PP_LAMBDA_EVAL_Z, (LAMBDA3 (void) APPLY2(BOOST_PP_CAT)(3_, 2_) (();), fun)) 繰り返し用マクロを EVAL_Zに変更
58.
PP_LAMBDA_EVAL_Z #define FWD_DECL(z, n,
d) void BOOST_PP_CAT(d, n)(); BOOST_PP_REPEAT(10, FWD_DECL, fun) BOOST_PP_REPEAT(10, PP_LAMBDA_EVAL_Z, (LAMBDA3 (void) APPLY2(BOOST_PP_CAT)(3_, 2_) (();), fun)) 繰り返し用マクロを EVAL_Zに変更 三つ目の引数を ラムダ式と繰り返しマクロの引数 のタプルにする
59.
その他の話
60.
Chaos Preprocessor
61.
Chaos Preprocessor ●http://sourceforge.net/projects/chaos-pp/
62.
Chaos Preprocessor ●http://sourceforge.net/projects/chaos-pp/ ●Boost.PPの作者によるプリプロセッサメタプロ グラミングライブラリ
63.
例:Active Argument ●ドキュメントの一番最初に紹介されている機能
64.
例:Active Argument ●ドキュメントの一番最初に紹介されている機能 #define A(n)
CHAOS_PP_DEFER(A_INDIRECT)()(CHAOS_PP_INC(n)) /**/ #define A_INDIRECT() A #define X(arg) arg #define Y(arg) X(arg) #define Z(arg) Y(arg) A(0) // A_INDIRECT()(1) X( A(0) ) // A_INDIRECT()(2) Y( A(0) ) // A_INDIRECT()(3) Z( A(0) ) // A_INDIRECT()(4)
65.
例:Active Argument ●ドキュメントの一番最初に紹介されている機能 #define A(n)
CHAOS_PP_DEFER(A_INDIRECT)()(CHAOS_PP_INC(n)) /**/ #define A_INDIRECT() A #define X(arg) arg #define Y(arg) X(arg) #define Z(arg) Y(arg) A(0) // A_INDIRECT()(1) X( A(0) ) // A_INDIRECT()(2) Y( A(0) ) // A_INDIRECT()(3) Z( A(0) ) // A_INDIRECT()(4) ●どう使うんだろう…
66.
中途半端に形式的な文法 pp-lambda: LAMBDA n pp-lambda-expr pp-lambda-expr: pp-lambda-term pp-lambda-expr
pp-lambda-term pp-lambda-term: pp-lambda-literal pp-lambda-parameter pp-lambda-macro-call COMMA LPAREN RPAREN pp-lambda-tuple pp-lambda-macro-call: APPLY n ( balanced-pp-tokens ) ( pp-lambda-expr-list ) pp-lambda-expr-list: pp-lambda-expr pp-lambda-expr-list , pp-lambda-expr pp-lambda-parameter: digit underscore pp-lambda-literal: ( balanced-pp-tokens ) pp-lambda-tuple: digit ( pp-lambda-expr-list ) underscore: 直前に空白文字がない _ n: 直前に空白文字がない digit
67.
今回のブツ ●http://patch-tag.com/r/digitalghost/pplambda/home ●darcs get http://patch-tag.com/r/digitalghost/pplambda ●http://sites.google.com/site/ilikemanaka/code/pplambda.tar.bz2
68.
ありがとう ●kothaさん ●http://www.kotha.net/ ●アドバイスなどいただきました
69.
終わり
Baixar agora