2016-10-12 2 views
0

コンパイル時にクロスプラットフォームの方法を探して、標準ライブラリコンテナが含まれているかどうかを確認します(ベクトル、マップ、セット、リスト) の#ifdefのHAS_VECTOR //は真剣に、ちょうどあなたが必要なものが含ま標準ライブラリのコンテナが含まれているかどうかを検出する

+0

ツールチェーンによってサポートされているか、プロジェクトのどこかに含まれていますが、誰かが標準コンテナを使用していますか? – user4581301

+0

申し訳ありませんが、私は質問する必要があります:なぜですか? –

+3

'#include 'とそれに続く '#if 1'はトリックを行うべきです –

答えて

-1

#endifのここ STDベクターで何かをします。彼らがすでに含まれていれば、それは問題ではありません。

0

あなたは、ヘッダーを知りたい場合は含まれると用意されています

あなたは標準では、あなたがマクロ__STDC_HOSTED__とそれを確認することができます、自立実装(限られたライブラリのサポートを)呼んで使用している場合。 __STDC_HOSTED__1に定義されている場合は、標準に準拠したコンパイラが適切な標準ライブラリを提供します。準拠しているホスト実装では、提供するコンテナヘッダを選択して選択することができないため、各コンテナに個別のマクロはありません。 Clangは非標準の__has_include機能を提供して、#ifのヘッダーファイルをテストしますが、これは移植性がありません。

あなたはヘッダがすでにこの翻訳単位に含まれているかどうかを知りたい場合は、次の

手動で独自のマクロあなたが指定したヘッダが含まれるたびに定義されない限り、あなたはこれを検出することはできません。標準のライブラリヘッダーを複数回インクルードすると、何も悪くはありません。

関連する問題