18

IDL(Interactive Data Language)で記述された既存のプログラムによって呼び出されるダイナミックライブラリをC++で開発しようとしています。IDLが必要な関数を呼び出せるように、名前マングリングを無効にするためにextern "C"を使用する必要があることを知っています(呼び出しメカニズムの残りの部分は非常に簡単です)。

ただし、完全に理解していない言語の機能を使用することを常に躊躇しているので、私の質問は次のとおりです。Cリンケージに戻すと、C ++のどの機能が失われますか?名前空間は明らかなものだと思いますが、C ++の他のすべての優れた機能も完全に無効にしますか?C ++ STL、および私が依存するようになったすべてのさまざまな言語機能(特にC ++ 11機能)を引き続き使用できますか?それとも、基本的にCでのコーディングに固執していますか?

4

1 に答える 1

17

ドロップされるのは、外部から見える名前の名前マングリングだけです。パラメータタイプおよびパラメータカウントによる関数のオーバーロードは、結果として機能を停止します。基本的に、リンクフェーズ中の名前解決は、従来のCモード(つまり、1つの名前-1つのエントリ)に戻ります。

実装の内部に関する限り、標準ライブラリとC++11の他のすべての優れた機能を引き続き使用できます。外部から見えるエンティティの名前のみがによって変更されextern Cます。

于 2012-12-02T23:27:05.607 に答える