C++で遊ぼうスマートフォン用の表示で見るスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。2012の参加記事です。Librariesは多くの環境をサポートしていますが、Boostでも手の届かない環境があります。それは、公開されていない開発環境です。ゲームコンソールの開発環境は公開されていないので、ワークアラウンドを自分で書くことはできても、それを公開することはできません。いった環境で「Boost使えない!」と言って終わってしまうケースをたまに見ますが、Boostは多くの環境をサポートするために機能ごとのワークアラウンドを提供しているので、自分で設定を書けばサポート環境外でもBoostが使えます。この記事は、クローズドなサポート外環境への設定を書く方法と、サポート環境とサポート外環境を含めたマルチプラットフォーム化のノウハウを紹介します。環境を知り、環境を入力するBoostでは、環境差異を吸収するためのBoost.Configというワークアラウンドライブラリが提供されています。このライブラリは、「この環境ではC++のxx機能を持っている/持っていない」を判定するためのマクロを、各環境向けに定義します。2012年現在のサポート外環境において、Boostを使うとコンパイルエラーになる最大の要因は「C++11に対応していない」でしょう。Boost.Configのデフォルトでは、「この環境ではC++11を含む全ての機能が提供されている」という状態になっているので、C++11に対応していないサポート外環境では、Boostの多くの機能はコンパイルエラーになるでしょう。エラー!static_assertキーワードがない!}Boost.Configにある「C++11の機能を持っていない」ことを示すマクロをdefineすれば、その環境がC++03と見なされて動作します。MY_BOOST_CONFIG_INCLUDEこのように設定したヘッダファイルは、Boostのヘッダをインクルードする前に必ずインクルードします。Boost.Configの設定マクロは、ここでは紹介しきれないので、ドキュメントを参照してください。C++03対応の欠陥を設定するマクロオプショナルな機能の保持状態を設定するマクロC++11のサポートしていない機能を設定するマクロ自分の環境がどの機能を持っていて、どの機能を持っていないか、ここで記述することはできませんので、自分の環境のドキュメントを自分で確認するか、コンパイルエラーになった機能に対してひとつずつマクロを設定していくかしてください。私はだいたい後者でやってます。前述した設定マクロは、サポート環境外の自分の環境を入力するだけで、サポート環境と自分のサポート外環境両方で動作するようになります。Boostのライブラリは、Boost.Configの設定だけでは動作するようにならないものもあります。Boost.Threadです。このライブラリはWindowsスレッドとpthreadを切り替えて使用するライブラリですが、これら以外の環境でBoost.Threadを使おうとすると、以下のようなコンパイルエラーになってしまいます。platform&quot;#endifこれは、ワークアラウンドが書きにくいという意味ではBoost側の欠陥ですが、ワークアラウンドを公開できないプラットフォームがオープンソースに文句を言うのは筋違いということで・・・。いった、各環境によって提供されているライブラリをラップすることでマルチプラットフォーム化したライブラリの場合はどうすればいいでしょうか。自分の環境向けにはもちろん使いやすいライブラリはあるけど、Windowsやpthreadのような環境でも動かしたい、という場合です。Boostに頼ることなく自分でマルチプラットフォーム化するというのは単に無駄な労力でしょう。多くの人によってパッチが投稿されテストされてきた実績はそのままいただいてしまいたいです。自分でBoostを書けというのか!と引いてしまうかもしれませんが、各環境のライブラリをラップしただけのライブラリは、所詮ただのラッパーなので難しくありません。Boost.Threadの場合は、以下のように書けばいいでしょう。MY_THREAD_INCLUDE関数オブジェクトをスレッドで動かす方法などは、私の以下のエントリを参考にしてください。Windows編このような方法をとることで、サポート環境とサポート外環境、両方でBoostが使えるようになります。Boostのインタフェースを全て実装するのが難しい場合は、サポート環境でBoostをそのまま使うのではなく、ミニマムなサブセットとしてBoostをラップすればいいでしょう。おわりにこの記事では、Boostをサポート環境外で動かすためのノウハウを紹介しました。「オープンな環境なのにBoostがサポートしてくれない!」ならパッチを送れば済む話ですが、クローズドな環境はそうはいきません。いった環境で開発することになった場合、「この環境ではBoost使えない!」で終わってしまうのではなく、もう少し粘ってみましょう。調べるだけで、サポート環境外でもBoostが使えるようになります。Boost.Configと、各ライブラリが提供するワークアラウンドを知ってください。Boostは多くの人によって絶えず改善されている人類の叡智です。Calendar、2日目のid:osyo-mangaさんに続きます。Librariesコントリビュータ。boostjp/cpprefjpサイトコアメンバ。くわしい情報は、こちらを参照してください:http://faithandbrave.github.ioお仕事の依頼も受け付けております。Blog|ブログを報告する。