web-dev-qa-db-ja.com

C ++ライブラリAPIの設計

C++ライブラリの優れたAPI設計、共有オブジェクト/ dllなどを調べるための優れたリソースを探しています。ソースレベルでのNice API、Niceクラス、テンプレートなどの記述には多くのリソースがありますが、ほとんど何もありません共有ライブラリと実行可能ファイルに物事をまとめます。 John LakosによるLarge-Scale C++ Software Designのような本は興味深いですが、非常に古くなっています。

私が探しているのは、テンプレートの処理に関するアドバイスです。私のAPIにテンプレートを使用すると、実行可能ファイル(または他のライブラリ)のライブラリコードが頻繁に作成されるため、そこでバグを修正した場合、新しいライブラリを単にロールアウトするだけではなく、そのコードのすべてのクライアントを再コンパイルして再配布する必要があります。 (そしてはい、私は少なくともライブラリ内の最も一般的なバージョンなどをインスタンス化しようとするようないくつかの解決策を知っています)

また、C++ライブラリで作業する際にバイナリ互換性を維持するためのその他の注意点と注意点も探しています。

そのようなことについての良いウェブサイトや本はありますか?

12
johannes

実際にあなたが求めているものである本があります。それは十分に適切な呼び出しです API Design for C++。 この本のウェブサイトには ソースコード 本から Errata もあります。

12
World Engineer

これはほとんど不可能です。単純な事実は、時々、仕事をするためにコンパイラーが必要であり、必要なものだけを魔法にすることはできないということです。 std::vectorをヘッダーのみのライブラリにできない関数はありません。コンパイラーは多くの魔法を機能させることができますが、それを呼び出さない限りそれらを使用することはできません。それは現実です。

できることは次のとおりです。必要のない場所ではテンプレートを使用しないでください。ここでは、実行できないことを示します。

単純な事実は、新しいバージョンでの再コンパイルは、静的に型付けされたライブラリで得られるパフォーマンス、安全性、および機能の利点と比較して、それほど大きな負担ではないということです。

3
DeadMG