PC-Lint がエラー 503: リレーショナルのブール引数を表示するコードがあります。次のように定義されたテンプレート関数の呼び出しです。
template <typename ITypeToUse>
void ShowWindowEx(
HWND hWnd,
int nCmdShow,
ITypeToUse *pControl);
呼び出し自体は次のようになります。
ShowWindowEx<IActualType>(this->GetWndHandle(), SW_SHOW, m_spControl);
どうやら、この部分ShowWindowEx<IActualType>(...)
は次のように解釈されているようです... PC-Lintは、それが山括弧内の型を必要とするテンプレート関数であるIdentifier1 < Identifier2 > Expression
ことに気付いていないようで、ブール式として解釈するために最善を尽くします。ShowWindowEx
この行のこのエラーを無視するように lint に指示するだけでよいことは承知していますが (実際には約 30 行あります)、これが再び発生するのを防ぎたいと思います。また、私が知る限り、PC-Lint はテンプレート関数呼び出しを処理できるはずですが、なぜこれがここに当てはまらないのでしょうか?
宣言はヘッダー内のクラス内にあり、呼び出しはそのクラスの別のメンバー関数内にあります。これは ShowWindowEx の直前に宣言されています。両方のメンバー関数の実装は .cpp ファイルで同じ順序で行われるため、ShowWindowEx の呼び出しはその実装の前に行われます。PC-Lint がヘッダーを無視した可能性はありますか?
編集:関数プロトタイプを次のように変更しました。
template <typename IPointerToUse>
void ShowWindowEx(
HWND hWnd,
int nCmdShow,
IPointerToUse pControl);
したがって、テンプレートは型がポインターであることを処理します。提案してくれた DeadMG に感謝します。上記がうまくいかない理由はないので、疑問はまだ残っていますが、この方法でもうまくいきます。