2009-12-23

C++0xで書くネタないかな

最近、C++0xネタを書くと、アクセス数が上がる。これは、C++0xがそろそろ注目され出したということだろうか。この流行にのっかって、ここでなにか書いておけば、ブログの知名度を上げることができるのだろうが、今ひとつネタが思いつかない。

lambdarvalue referenceはすでに解説している。ほかに何か目玉機能はあっただろうか。

templateは、実はあまり変わっていないのだ。conceptさえ否決されていなければ、相当のネタがあったのだが、concept無き今となっては、小粒な改良でしかない。たとえば、一部のテンプレート引数を決め打ち出来る、新しいtypedefとして、テンプレートエイリアスとか、関数テンプレート引数にデフォルトのテンプレート引数を指定出来るとか、便利ではあるが、小さい変更にとどまっている。

C++0xでは、メタプログラミングが一般的になるだろうが、これとて、何も新しい話ではない。C++98以前から、メタプログラミングというのは盛んに行われてきたし、標準ライブラリにも、iterator_traitsというメタ関数が、すでに存在する。ただ、type traits等のライブラリが追加されただけであって、type traitsのほとんどのメタ関数は、C++03の枠内でも、実装可能なのである。

ライブラリが豊富になった。ただ、ライブラリは、ひとつのブログ記事で解説するのに余るほど膨大で、金でももらわなければ到底やりきれない。スレッド、アトミック操作、正規表現、関数ポインタだろうが関数オブジェクトだろうが汎用的にラップ出来るfunction、引数の一部を割り当て出来るbind。時間時刻、乱数、unordered系コンテナ。

4 comments:

Anonymous said...

目玉機能じゃないですが・・・
- POD → trivial types
- シーケンスポイント → sequenced before/after
・・・とか、これまで長いこと使われてきていながら
C++0x で置き換えられてしまう用語の解説とかまとめて
おいてもらえるとうれしいような気がします。

日本語で解説記事が自然発生しそうな気配がないので、
アクセス数という点でもおいしいんじゃないでしょうか?

江添亮 said...

PODがtrivial typeに置き換わるわけじゃありませんよ。
C++0xには、両方存在します。
あるクラスが、trivial default constructorをもっていて、trivially copyableならば、
trivial classです。trivial classはtrivial typeです。
そのクラスが、仮想関数を持っていようと、アクセスコントロール(protectedやprivateやpublic)を複数使っていようと、trivial classなのです。

一方、PODは、trivial classに加えて、standard-layout classでなければなりません。
これは、例えば、仮想関数を持っていてはいけません。

type traitsライブラリには、is_trivialとis_podの両方が存在します。

ちなみに、VC10 Beta2のDinkumwareの実装では、is_trivialがis_podと同等になってました。悲しい。

Anonymous said...

いくつか POD を必要としていたところが trivial types に
なってるのを見て勘違いしてました。いっしょくたになって
やたら厳しかった制限が、要件を細分化して必要なぶんに
絞ったってことですね。ありがとうございます。

やねうらお said...

> ただ、ライブラリは、ひとつのブログ記事で解説するのに余るほど膨大で、金でももらわなければ到底やりきれない

では、C++本を書きませんか?出版社の人を紹介しますよ。プログラムとは関係のない仕事に従事するよりは幸せなのではないかと勝手ながら想像するのですが、いかがでしょう?

興味があれば私までメールください。(メアド → yaneurao@sun-inet.or.jp)