3

たとえば、zlibに依存するいくつかの機能を備えたC++テンプレートライブラリがあります。プリプロセッサシンボルを使用して機能を選択的に有効または無効にします。つまり-DHAVE_ZLIB=1、コマンドラインで設定します。

CMakeベースのビルドシステムは、インストールされているzlibを認識し、それに応じたフラグをコンパイラに追加します。もちろん、これはユーザーがお気に入りのIDEまたはMakefileを使用して手動で行うこともできます。

ライブラリの特性の1つは、zlibを使用するコードがzlibを使用しないコードとインターリーブされることです。つまり#include <library/header.h>、zlibが存在するかどうかに関係なく、使用が機能するはずです。

現在、#ifzlibに依存するコードを公開しています。したがって、CompressedStreamたとえば、ユーザーがのようなものを使用しようとすると、クラスが見つからないだけです。これはユーザーにとって非常に苛立たしいことです。ビルドシステムは、zlibが見つからないことを警告しますが、ユーザーであるユーザーはこれを表示しないか、すぐに忘れてしまいます。私自身もこの罠に陥っています。

さて、私の質問です。ユーザーがzlibを必要とするコードを使用しようとした場合に、zlibが無効になっていることをユーザーに警告する最良の方法は何ですか。

私が考えることができる唯一のことは、多くのコンパイラーに実装されているdeprecatorマーカーメカニズムを使用することです。それぞれに異なる構文が必要ですが、これはプリプロセッサマクロを使用して簡単に抽象化できます。他に良い方法はありますか?

このソリューションは、VS> 8、GCC> 4.2、およびLLVMでのみ機能する必要があります。

4

1 に答える 1

2

そのようなことについてユーザーに警告する適切な場所は、(IMO) ビルド システムです。Ogre3D、KDE、およびその他の多くのプロジェクトを見てください。それらはすべて、ビルドの構成後に一種のアウトラインを出力します。この概要には、見つかったものとそうでないもの、およびその結果についての情報が含まれています。

Qtでさえ、これを修正するために何もしません。STL サポートを使用して Qt をビルドするオプションがあり、そのようにビルドされていない場合、警告などは表示されず、未定義のメソッドに関するコンパイル エラーのみが表示されます。したがって、コンパイル段階でそのようなことについてユーザーに警告する方法はないと思います。

于 2012-05-08T09:28:29.707 に答える