たとえば、zlibに依存するいくつかの機能を備えたC++テンプレートライブラリがあります。プリプロセッサシンボルを使用して機能を選択的に有効または無効にします。つまり-DHAVE_ZLIB=1
、コマンドラインで設定します。
CMakeベースのビルドシステムは、インストールされているzlibを認識し、それに応じたフラグをコンパイラに追加します。もちろん、これはユーザーがお気に入りのIDEまたはMakefileを使用して手動で行うこともできます。
ライブラリの特性の1つは、zlibを使用するコードがzlibを使用しないコードとインターリーブされることです。つまり#include <library/header.h>
、zlibが存在するかどうかに関係なく、使用が機能するはずです。
現在、#if
zlibに依存するコードを公開しています。したがって、CompressedStream
たとえば、ユーザーがのようなものを使用しようとすると、クラスが見つからないだけです。これはユーザーにとって非常に苛立たしいことです。ビルドシステムは、zlibが見つからないことを警告しますが、ユーザーであるユーザーはこれを表示しないか、すぐに忘れてしまいます。私自身もこの罠に陥っています。
さて、私の質問です。ユーザーがzlibを必要とするコードを使用しようとした場合に、zlibが無効になっていることをユーザーに警告する最良の方法は何ですか。
私が考えることができる唯一のことは、多くのコンパイラーに実装されているdeprecatorマーカーメカニズムを使用することです。それぞれに異なる構文が必要ですが、これはプリプロセッサマクロを使用して簡単に抽象化できます。他に良い方法はありますか?
このソリューションは、VS> 8、GCC> 4.2、およびLLVMでのみ機能する必要があります。