C++テンプレートプログラミングの定番本の第2版、C++ Templates The Complete Guide Second Edition
2018-10-16


ASAHIネット([URL] )のjouwa/salonから。
---
 Modern C++と総称されるC++11以降のC++。
 数ヵ月前に調べたとき、日本語で書かれたModern C++のテンプレートプログラミングのいい本、それもC++17をカバーしているいい本がなかった。

[URL]
Modern C++ Design―ジェネリック・プログラミングおよびデザイン・パターンを利用するための究極のテンプレート活用術(C++ In‐Depth Series) 単行本 〓 2001/12
アンドレイ アレキサンドレスク (著), Andrei Alexandrescu (原著), 村上 雅 章 (翻訳)
というのがあるが、この本は、2001年12月発行。
 原書ペーパーバックは2001年1月発行の古い本で、タイトルは、Modern C++ Designとなっているが、古いC++の本。C++11以降の、いわゆるModern C++とは、あまり関係ないといっていいくらいの本。それくらいModern C++は古いC++から進化している。
 著者のアンドレイ・アレキサンドレスクさんは、この本で、C++のテンプレートプログラミングの秘儀をたくさん書いた著名人で、FacebookでコアなコードをC++で書いていたけど、プログラミング言語Dに惚れ込んで、DでFacebookのコアなコードを書き直したり、そのうちFacebookもやめて、Dのほうで活躍していた人。今もそうかは、知らない。以前、ブログで書いたことがある。

関連:
[URL]
プログラミング言語D。もう2年半くらい前からたまっていたメモが出てきた。\(^O^)/

 C++11以降のModern C++では、古いC++の技法はあまり必要ないというか、考え方は参考になるかもしれないけれど、古いC++で必要だった黒魔術的なテクニックなしで、テンプレートが書けるようにC++11以降は進化している。特にC++17になると、C++11よりもさらに進化している。
 アンテナハウスのブログ、
[URL]
C++の劇的な進化に圧倒されるModern C++
に書いたように、
--- ここから ---
テンプレートプログラミングの劇的な強化
constexprによるコンパイル時計算の強化。コンパイル時にいろいろ調べられるメタプログラミング機能、SFINAEをやりやすくする機能の強化。
--- ここまで ---
が行われていて、
--- ここから ---
C++とプログラミングパラダイムの関係を考えると、C++は、
Cの命令型プログラミング(手続き型プログラミング)に、オブジェクト指向プログラミングを追加
GenericsとTemplateによる汎用テンプレートプログラミング
といったマルチパラダイム言語に進化してきました。
Modern C++は、汎用テンプレートプログラミングというパラダイムをさらに推し進め、テンプレートメタプログラミング(TMP, Template Meta Programming)を強化し、流行りの関数型プログラミングの強化も抜かりなくやっていて、マルチパラダイム言語としてますます強力になった印象です。
--- ここまで ---

 英語なら、Modern C++の本、それもC++17対応の本がたくさん出ている。もちろん、テンプレートプログラミング、それもテンプレートメタプログラミング(TMP)の本も出ている。
 テンプレートプログラミングについては、
C++ Templates The Complete Guide Second Edition
David Vandevoorde, Nicolai M. Josuttis, Douglas Gregor
を薦める。何カ月か前に買って、まだ、読み終えてないけれど。
 この本の初版は、古いC++でのテンプレートプログラミングの定番本でしたが、C++17対応に書きなおした本。

 ここで、ネタかつ教訓(笑)をひとつ。
 C++のプログラミング、中でもテンプレートプログラミング、もっといえばその中でも、テンプレートメタプログラミング(TMP)は、C++を書いていると思ってはいけません。\(^O^)/
 以前書いたように、Emacsをエディタと思ってはいけないのと同じです。\(^O^)/

続きを読む


コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット