0

コアメインサーバーがユーザーによる要求を処理し(環境のようなシェルで)、ダイナミックライブラリをロードしてioctlといくつかのdebugfsを実行するように記述したいと思います。コアサーバーはC++であり、ロード可能なライブラリはcで記述されています。いいデザインですか?


シェルスクリプトがライブラリをロードしてリクエストを処理するのはどうですか?それは可能ですか?

4

2 に答える 2

3

C ++はC互換性を念頭に置いて設計されているため、C++で記述されたプログラムからCで記述されたライブラリを使用することは間違いなくOKです。この言語は、C ++でCヘッダーを使用するための構文も提供しているため、実行しようとしていることは間違いなく可能です。

場合によっては、Cコードがオブジェクトをエミュレートするために不透明なハンドルを使用している可能性があるため、読みやすさの観点から理想的ではない場合があります。これはCには慣用的ですが、C++にはありません。ただし、この問題は、Cライブラリの周りにC ++ラッパーを作成することで簡単に解決でき、オーバーヘッドはほとんどありません。

于 2013-03-17T07:04:57.467 に答える
2

プログラムまたはその一部がC++で記述されているが、Cでロード可能なモジュールへのインターフェースをとる設計は前代未聞ではありません。開発者が実装にC++(STL、例外)の能力を活用したいが、たとえばC ++コンパイラが例外やRTTIを実装する方法の微妙な違いに対処せずに、インターフェイスのCの単純さと統一性を維持したい場合に発生します。Unixの場合、追加の理由は、C ++がWindowsの場合と同じレベルに到達したことがないため、純粋なCにはツールのサポートが最適であるということです。

この例としては、C++で内部的に記述されたサードパーティのPythonモジュールがあります。C ++で実装されていますが、Python / C APIが期待するものであるため、Cのみを使用してPythonと通信します。場合によっては、この通信が豊富になることがあります。たとえば、C ++例外はPython例外として報告され、その逆も可能です(Boost.Pythonはこれを自動的に行います)。GTK--ツールキットを使用すると、C ++でGTKウィジェットを記述し、それらのインターフェースを通常のGTKウィジェットとしてエクスポートできます。

于 2013-03-17T07:07:58.983 に答える