いさぽん.COM「つくる」に挑戦中

ゲーム系プログラマによる特に方針のないブログ。技術系とカレー、ラーメンネタ多めだったはずが、最近はダイエットネタ多め。

C++11の落とし穴。functionalがあると思うなよ

http://www.isapon.com/entry/2015/08/27/C%2B%2B11%E3%81%AE%E8%90%BD%E3%81%A8%E3%81%97%E7%A9%B4%E3%80%82functional%E3%81%8C%E3%81%82%E3%82%8B%E3%81%A8%E6%80%9D%E3%81%86%E3%81%AA%E3%82%88%E3%80%82%E2%80%A6%E3%81%82%E3%81%A3%E3%81%9F%EF%BC%81C++11、便利ですよね。自分の中でのお気に入りとしては「範囲に基づくforループ」です。これが地味に便利。

C+11の話題でやっぱり欠かせないのはラムダ式なのですが、これ、ちょっと落とし穴があります。ラムダ式…というかクロージャは便利です。特に再帰的なプログラムを組む時は関数内に再帰部分を記述できるのでかなり楽ですね。関数が無駄に外に出ないというのはメンテナンスのことを考えてもとても良いです。

が、最近はあえてラムダ式を使うのを避けていたりします。と、いうのも今メインで開発しているターゲットが Android NDK なのですが、functional が未実装。何やら問題があるらしく使えません。include するとファイルが見つからないと。というわけで、スマホ向けアプリを作る際、もしくはゆくゆくは移植などをしたいと考える場合には functionテンプレート を使う構造を避けないとなりません。

「なーに俺はAndroid NDKなんてやらないぜ!」と言うのなら気にしなくても良いのですが、やっぱりライブラリを作るときはそれなりにシェアのあるプラットフォームで使えるようにしておきたい。と思うと使用できないプラットフォームがあるものはなるべく避けたいですね。

今後Windows 10 Mobile のことも考えると、まだまだC++11の課題は多そうです。

C++11というよりも、「beter C++(ちょっと良くなったC++)」くらいの感覚で使用するのがたぶん幸せな気がします。

2015/8/27 追記

www.isapon.com

スンマセン…ありました。