問題タブ [c++-modules]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
18362 参照

c++ - Clang で C++ モジュールを使用するにはどうすればよいですか?

モジュールは #includes の代替です。Clang には C++ の完全な実装があります。今 Clang を使用してモジュールを使用したい場合はどうすればよいですか?


使用する

モジュールの仕様 (構文を含む) が最終版ではないため、C++ ソース ファイル内の はまだ動作 (コンパイル) しません。


Clangのドキュメントには、フラグを渡す-fmodulesと #includes が適切なインポートに書き換えられることが記載されています。ただし、プリプロセッサをチェックすると、そうでないことが示唆されます (test.cpp に#include <stdio.h>は空のメインしか含まれていません)。

-fmodulesさらに、 vs フラグをまったく指定せずにこのテスト ファイルをコンパイルすると、同じオブジェクト ファイルが生成されます。

私は何を間違っていますか?

0 投票する
1 に答える
1229 参照

c++ - CMake で VC++ モジュールを使用する方法

MS Visual C++ 2015 Update 1では、モジュールの提案が実装されています。

これがどのように機能するかの例です:
ソース:

ビルド コマンド:

依存関係グラフ:

各モジュールにはfile.ixx、そのエクスポートを含む 1 つがあります。
このファイルは と にコンパイルされModuleName.ifcますfile.obj

Mファイルがモジュールをインポートする場合、ファイルM.ifcが存在する必要があります。
デフォルトでは、cl.exe は.ifc現在のディレクトリ内のファイルを検索しますが、明示的な名前または検索パスを指定することができます。

したがって、問題は次のとおりです。 CMake でモジュールの VC++ 実装を使用する方法は?
MSBuild バックエンドを使用する必要はありません。Ninja も問題ありません。

0 投票する
3 に答える
974 参照

c++ - c++1z モジュールは、Windows での dllimport dllexport の必要性を置き換えますか?

モジュールに対する C++1z の提案について学んでいます。私の最大の希望は、 Windowsでのdllimport,の使用に取って代わることです。c++1z モジュールを使用すると、windows およびLinux でdllexportビルドできますか? すべてのプラットフォームとコンパイラで必要なのはモジュールだけですか?.dll.sodllimport/dllexportexport

0 投票する
1 に答える
760 参照

c++ - モジュールを複数のファイルに分割する方法

C++ のモジュールについて読んだことがありますが、どうすればよいかよくわかりません。現在のマージされたモジュールの提案を使用して、C++ モジュールを複数のファイルに効果的に分割するにはどうすればよいでしょうか。

エクスポートしたい 2 つのクラスがあるとします。これらの各クラスの実装が別々のファイルにとどまるように、ixx ファイルを分割したいと考えています。

私は次のようなものをイメージしました:

インターフェイス.ixx:

次に、このようにクラスを実装したいと思います。

A.ixx:

B.ixx

私が知りたいこと: モジュールは、ファイルに関係なく、そのインターフェースを認識していますか? そうでない場合、モジュールを複数のファイルに分割する別の方法はありますか? その場合、ばかげているように思えるかもしれませんが、大きなモジュール内に大きなクラスがある場合、物事を分離したままにしておくのは魅力的です。

0 投票する
0 に答える
316 参照

c++ - モジュール TS と純粋仮想クラス

問題

別のモジュールで定義した純粋仮想クラスを使用しようとしていますが、使用しようとすると次の問題が発生します。base class undefined

ボーナス情報

問題を特定するための検索で、名前空間自体にも同様の問題があることがわかりました

コンパイラ

VC++現在、次の追加設定でコンパイラを 使用しています。/std:c++latest /experimental:module /module:exportActiveMacrosこれは、IDE プロジェクト設定で行ったものです。

コード

コードに関しては、次のようになります。

Foo.ixx

アナザーワン.ixx

0 投票する
1 に答える
443 参照

c++ - #include の後の型を使用した Clang++ -fmodules エラー

-fmodules次の簡単なテスト ケース ファイルは、以下に示すコマンドを使用して でコンパイルすると、Clang の github ミラーからの「master」のヒントでコンパイル時エラーが発生します。これは、Clang の新しい実験的なモジュール機能のバグなのか、標準ライブラリのモジュール マップの実装に問題があるのか​​ 、それとも何か間違っているのでしょうか。コマンドに追加すると、エラーが引き続き表示-fbuiltin-module-mapされます。stdint.h興味深いことに、 に置き換えると、エラーは表示されなくなりましたcstdint

エラーメッセージを含む私のコンパイルコマンドは次のとおりです。

私が使用しているビルドに関する情報: Matus Chochlik の github Clang ミラーのフォークからのものです。しかし、元のclang gitミラーの(当時の)「マスター」のヘッドに対応するコミットに設定されています(つまり、Matus Chochlikの機能「reflexpr」ブランチからのコミットは含まれていません):

(注: これはバグではないかと疑って、LLVM 管理者にも上記のレポートを電子メールで送信しました。返信があり、ログインしてくれたら、LLVM Bugzilla にファイルするつもりです。しかし、ここにも投稿すると思いました。私が間違っている場合、または Clang の C++1z+ モジュールのサポートに取り組んでいる人にとって興味深い場合)

編集1:

コンパイル コマンドラインに を追加すると、Clang の別のビルドのディレクトリではなく、-v実際にビルドのディレクトリを検索していることがわかります。次に例を示します。include

/usr/local/include問題が Clang ビルドのヘッダーとOS X システム ヘッダー間の相互作用であるかどうかはわかりません。/usr/include

0 投票する
2 に答える
557 参照

c++ - Clang モジュールと std の相互作用

(私が使用している Boost と Clang の特定のバージョンについては、質問の最後を参照してください)

新しい実験的機能を使用して master/HEAD から Clang でコンパイル-fmodulesすると、以下に示すコマンドライン オプションを使用して次のファイルをコンパイルすると、ビルド エラーが発生します。

コンパイル コマンドとエラー:

を削除する#include <iterator>か、 の後に移動すると#include <boost/move/iterator.hpp>、エラーが消えます。

質問:これは単なる Boost ライブラリ (特に Boost Move はどうやら) が Clang モジュール マップ ファイルを含むモジュール用に準備されていないことの副産物ですか? これは、Clang が libc++ 用に実装したモジュール マップ ファイルのバグでしょうか、それともモジュールの実装自体のバグでしょうか?

興味深いことに、次の 28 ~ 28 行目をコメントアウトすることで、エラーを解消できますboost/move/detail/iterator_traits.hpp

使用中のバージョン

ブースト 1.61

Clang は、2016 年 12 月 7 日の時点で、LLVM の github ミラーのマスター ブランチの先端からのものです (技術的には LLVM のフォークからのものですが、LLVM 自身のマスター ブランチと同一のマスター ブランチ上にのみ存在します)。

0 投票する
1 に答える
2981 参照

c++ - clang を使用した C++ モジュール

Clang がモジュール TS のサポートを提供しているようです。SVN(トランク)からコンパイルされたClangを使用してこれを試してみましたが、期待どおりに機能しました。

catchライブラリをモジュールにラップする次のステップに進みたいと思います。

私はこの方法で a を宣言しようとしましたmodule.modulemap:

およびmain.cpp含む:

コンパイル モデルは、「モジュールのバイナリ表現は、必要に応じてコンパイラによって自動的に生成される」と述べています。

main.cpp私が得るを使用してコンパイルclang-4.0 -std=c++1z -fmodules-ts main.cpp

それをどのように解決できるか考えていますか?