我有一些 PC-Lint 给我的代码Error 503: Boolean argument to relational on。这是对模板函数的调用,其定义如下:
template <typename ITypeToUse>
void ShowWindowEx(
HWND hWnd,
int nCmdShow,
ITypeToUse *pControl);
调用本身如下所示:
ShowWindowEx<IActualType>(this->GetWndHandle(), SW_SHOW, m_spControl);
显然,该部分ShowWindowEx<IActualType>(...)
被解释为Identifier1 < Identifier2 > Expression
... PC-Lint 似乎没有意识到这ShowWindowEx
是一个模板函数,它需要尖括号中的类型并尽力将其解释为布尔表达式。
我知道我可以简单地告诉 lint 忽略此行的此错误(尽管实际上它大约有 30 行),但我想防止这种情况再次发生。另外,据我所知,PC-Lint 应该能够处理模板函数调用,知道为什么这里不是这种情况吗?
声明位于标头中的类内部,调用位于该类的另一个成员函数中,该函数在 ShowWindowEx 之前声明。两个成员函数的实现在 .cpp 文件中以相同的顺序发生,因此对 ShowWindowEx 的调用发生在其实现之前。PC-Lint 是否可能只是忽略了标题?
编辑:我现在将函数原型更改为:
template <typename IPointerToUse>
void ShowWindowEx(
HWND hWnd,
int nCmdShow,
IPointerToUse pControl);
所以模板会处理指针类型。感谢 DeadMG 的建议。问题仍然存在,因为我认为上述方法不应该起作用,但它也可以这种方式起作用。