現在ヘッダーのみのC++ ライブラリをいくつか作成しました。私のクラスのインターフェースと実装の両方が同じ.hpp
ファイルに書かれています。
私は最近、この種のデザインはあまり良くないと考え始めました。
- ユーザーがライブラリをコンパイルして動的にリンクしたい場合、それはできません。
- コードの 1 行を変更するには、ライブラリに依存する既存のプロジェクトを完全に再コンパイルする必要があります。
私はヘッダーのみのライブラリの側面を本当に楽しんでいます#include
.
両方の長所を活かすことは可能ですか? つまり、ユーザーがライブラリをどのように使用したいかを選択できるようにします。ばかげたコンパイル時間を避けるために「動的リンク モード」でライブラリに取り組み、パフォーマンスを最大化するために完成品を「ヘッダーのみモード」でリリースするので、開発もスピードアップします。
論理的な最初のステップは、インターフェイスと実装.hpp
を.inl
ファイルに分割することです。
とはいえ、先に進む方法はわかりません。多くのライブラリLIBRARY_API
が関数/クラス宣言の先頭にマクロを追加するのを見てきました.ユーザーが選択できるようにするために、おそらく同様のものが必要でしょうか?
「...の複数定義」エラーを回避するために、すべてのライブラリ関数にinline
キーワードのプレフィックスが付けられています。キーワードはファイル内のマクロに置き換えられると思いますか? マクロは、「ヘッダーのみモード」の場合は解決され、「動的リンク モード」の場合は何も解決されません。LIBRARY_INLINE
.inl
inline