はじめに
ちょっと表題がわかりにくいですが、ようは C++11 の使えない環境でも C++11 使っていこうよ、という話です。が、nullptr とか STL とかそういう話ではないです。私は個人的なプログラムは Visual Studio 2012/2013 を使って書くことが多いです。
なので、C++11 使えます。(VC++ は C++ Compiler に非ず!とか、C++11 対応微妙とかいうツッコミはなしで…)
gcc も clang も使いますが、C++11 はもちろん使えます。
仕事でも Visual Studio 2012 をメインに使っているので、C++11 使えます。
ただそうでない場合もあります。
組み込み系では C++11 が使えない環境の場合があります。
冒頭で触れた nullptr や STL 相当のものは C++03 環境でも使えるので、積極的に使っていくとよいでしょう。
(boost を使うとより簡単に C++11 相当のことができるようになります。)
しかし、それには限界があって C++03 ではどうしても使えないものがあります。
そこで、少し工夫してもっと C++11 を使っていこうというのが、今回の話です。
C++11 コンパイラーを使う
C++11 コンパイラーを使うようにします!「いや、使えないから困ってるんだけど…」
ですよねぇ…
すみません。訂正します。
C++11 コンパイラを使って"コンパイル"だけします。
ターゲットバイナリは作れませんが、コンパイルだけでも C++11 の機能が使えるようになります。
ただ単純に、コンパイラを C++11 対応のもに変えてもコンパイルエラーが出ると思います。
環境依存なものは、マクロ定義して誤魔化します。
バイナリを作るのが目的ではないので、コンパイルが通るようにダミー宣言するだけで OK です。
ライブラリは、リンクを行わないので宣言だけで済みます。なので特に何かする必要なし。
その他のエラーもマクロで誤魔化します。
コンパイルだけで得られるもの
さて、C++11 でコンパイルできたからといって動作するものが得られなければ、なんの意味もないように思えますが・・そうでもありません。
override/final です!
override と final は継承関係に対しての検証機能ですので、コンパイルだけでも意味があります。
基底関数の引数変えたけど、派生先を変更し忘れた!なんてミスともおさらばです。
もちろんコンパイルしかできないので、開発者がローカルで常にチェックするというよりも、
Jenkins などの CI ツールを使って C++11 コンパイルを回すという使い方になると思います。
それでは、よい C++11 ライフを!
※ override/final にも使える機能がないか探しています。情報ある方は教えて下さいm(__)m
0 件のコメント:
コメントを投稿