私はC++ 1zのモジュールの提案について学んでいます。私の最大の希望は、Windows上でdllimport
,dllexport
の使用を置き換えることです。 C++ 1zモジュールを使用すると、Windows上で.dll
をビルドでき、dllimport/dllexport
の使用を避けるためにLinux上で.so
をビルドできるようになりますか?モジュールexport
は、すべてのプラットフォームとコンパイラで必要とされることでしょうか?Windowsのdllimport dllexportの代わりにC++ 1zモジュールを使用する
答えて
残念ながら、
C++でのモジュールの提案は、ヘッダーの欠点に対処しようとしていますが、ヘッダーを含むコードでは特に問題になります。
テンプレートは通常、完全にヘッダーに実装されますが、テンプレートの内容は、そのヘッダーがインクルードされる前に発生するプリプロセッサ定義の対象となります。例えば
テンプレートは識別子としてi
を使用し、#define i 2
のようなものを持つヘッダがテンプレートのヘッダの前に含まれることを起こる場合は、あなたのコードは次のように出始めることができ:
for (int i=0; i<10 ; i++)
...プリプロセッサを実行すると、次のようになります。
for (int 2=0; 2<20; 2++)
...明らかにコンパイルされません。
モジュールがこれを修正します。モジュールは、ヘッダの代わりに独立してコンパイルされます。独立してコンパイルされるので、ソースコードにこれらのヘッダーが含まれていない限り、モジュールは他のヘッダーの影響を受けません。
同様に、ヘッダー内に作成されたプリプロセッサ定義は、モジュールをインポートするコードに影響を与えることはできません。そのモジュールをインポートするファイルに表示されるモジュール内の唯一の名前は、モジュールから明示的にエクスポートされた名前です。
dllexportはまだ必要ですが、dllimportはおそらく自動的になります。少なくともC++ Modules in VS 2015 Update 1に、彼らは1つのコメントでそれを言う:
アンドリューPardoe [MSFT]
@Matthias:プログラマが今だけDLL境界でエクスポートされるシンボルを__declspec(DLLEXPORTを)言う必要があります。 __declspec(dllimport)は、モジュールを消費するときにコンパイラによって処理されます。
残念ながら、それについての信頼できる情報はありませんでした。
'.dll'を使うためにモジュールの中でマクロを使う必要はないという希望があります。 – Nick
- 1. dllexport/dllimportスイッチのマクロ
- 2. dllimportとdllexportの間のリンク
- 3. C++ 1zでtry_emplace()の代わりにstd :: map :: emplace()を使用する理由はありますか?
- 4. __declspec(dllimportの/のdllexport)と継承
- 5. NotImplementedError:モジュールCrypto.Signature.pkcs1_15を代わりに使用
- 6. C++/CLIの代わりにC++用のVisual C++を使用する
- 7. wgetコマンドの代わりに使用するPerlモジュール
- 8. VSCode:Git for Windowsの代わりにWSL Gitを使用する
- 9. Windowsサービスの代わりに
- 10. Windowsの代わりにpexpect
- 11. Windowsの代わりにタスクスケジューラ
- 12. SQL Serverの接続C#:認証Windowsの代わりにコンピュータ名を使用
- 13. dllexportとdllimportの違いは何ですか?
- 14. カスタムクエリの代わりにアクセスビューを使用するC#
- 15. コマンドラインでC++の代わりにg ++を使用するMinGW?
- 16. C#ループの代わりにLinqメソッドを使用する
- 17. C#でgenericの代わりにpolymorphismを使用する方法
- 18. のWindows AzureのBLOBの使用の代わりに、フォルダ
- 19. divの代わりにdivの代わりにJSのプリペンドを使用する
- 20. 代わりに使用するフォント
- 21. enumの代わりにC#
- 22. npm WARN非推奨[email protected]:代わりにuuidモジュールを使用
- 23. NotImplementedError:代わりにCrypto.Cipher.PKCS1_OAEPモジュールを使用してください。
- 24. c#zedgraph(カンマの代わりに小数点を使用)
- 25. Windowsの代わりになるコマンドラインtaskkill.exe
- 26. pythonに2.7の代わりに2.7の代わりにインストールされたモジュール
- 27. モジュールで 'Handles Me.FormClosing'の代わりに
- 28. Windowsのマルチノードとフーガの代わりに?
- 29. Railsの代わりにsend_fileの代替ファイルを使用する
- 30. C++で%operatorおよび/ Operatorを使用する代わりに
C++ 1zにはモジュールがありません。 –
私は標準の専門家ではありません。その情報はどこにありますか? – Nick
どちらの情報ですか? –