2016-12-11 12 views
6

Xcodeバージョン8.1でC++を使用しています。 boost::anyの機能を使用する必要がありますが、Boostの一部を私たちのプロジェクトに取り込むことに強く反対しています。C++ 17「any」とXcode 8.1

は「C++に統合されました」17 hereです。

私のXcode 8.1プロジェクトでこれを使用したいと思います。私は-std=c++1zをプロジェクトのカスタムフラグとして使用しようとしましたが、ヘッダーが見つからないようです。

Xcodeプロジェクトでstd::anyまたはstd::experimental::anyを使用するにはどうすればよいですか?

実装から適切なヘッダーをダウンロードし、プロジェクトのソースコードにスローすることはできますか?あるいは、Xcode/Clang/C++の私のバージョンで実際に利用できるのですか?

+0

XcodeはIDEです。コンパイラは付属していますが、そのコンパイラを使用する必要はありません。 – Yakk

+2

私はそれを理解していますが、バニラのXcode 8.1インストールを使用したいと思います。デフォルトのコンパイラです。 XcodeもC++の実装ではありません。わかっています。私はデフォルトでXcodeユーザとして私に利用可能なC++実装を使用したいと思います。 –

+1

私はこの質問に答えることに強く反対しています(それほど議論しません)。いいえ、あなたは「あなたのプロジェクトのソースコードにそれらを投げる」ことはできません。あなたは自分の人生を複雑で困難なものにするために、あなたの道を離れます。私はそれをサポートしません。 –

答えて

6

「デフォルトのXcodeコンパイラ[anyはサポートされていません]」と言うと同時に、anyをサポートするように要求することはできません。異なるコンパイラバージョンの標準ライブラリヘッダーを混在させることもできません。

あなたはどちらか

  • std::anyまたは
  • any様の種類を提供する任意のサードパーティのライブラリを使用を提供コンパイラのバージョンを使用することができます。
2

インストール設定には、C++ 17標準がありません。 std::anyは、あなたが望むものを少なくとも実験的にサポートしているコンパイラがなければ、あなたには利用できません。

Clang Cxx Status

あなたはおそらくboost::anyを使用して多くの方の運を持っていると思います。

サードパーティライブラリを実際に使用しないように設定されている場合、実際にはanyを作成することは難しくありません。私は車輪を再発明することはお勧めしませんが、この場合はそれほど難しいことではありません。

Here's a SO question with an answer showing a way to do 'any'

2

サードパーティのライブラリを介してstdに新しいタイプを挿入することは違法です。コンパイラをアップグレードしたり、コンパイラがサポートする別個のstdライブラリを入手したり、別の名前空間にanyを提供するサードパーティライブラリを使用したり、独自のライブラリを作成することができます。

最初にあなたは言ったことはありません。

xcodeはそのコンパイラが実際に何を宣言していないので、2番目は難しいです。 clang-llvm由来のコンパイラで動作する一般的な2つの標準ライブラリがあります。 libC++とlibstdC++。そのような種類のスワップは、他のものがあなたが望む機能を持っていても非常に高価になる傾向があります。

3つ目は基本的には「use boost」または同等のものです。

最後は難しくありません。 「十分に良い」と仮定すると、理想的な例外保証に巻き込まれたり、正確に一致する標準などであると仮定して、数日間の作業(ほとんどは事実の後のバグ)。実装には、自然に完璧に近づくために双曲線の努力が必要です。

2

Xcode 9.0 betaをダウンロードできるようになりました(https://developer.apple.com/download/)。これは、C++ 17フラグオプションをサポートしています。

+1

はい!これは良い知らせです。 –

+0

@Zammbiあなたが提供できるリンク –

+0

アップルデベロッパーにログインする必要があります:https://developer.apple.com/download/現在、ベータ5です。最終バージョンをリリースするには、あまりにも長くしないでください。 – Zammbi

関連する問題