У меня есть код, который мне дает PC-Lint Ошибка 503: логический аргумент для реляционного включен. Это вызов функции шаблона, которая определяется следующим образом:
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 просто игнорировать заголовок?
EDIT:
Теперь я изменил прототип функции на:
template <typename IPointerToUse>
void ShowWindowEx(
HWND hWnd,
int nCmdShow,
IPointerToUse pControl);
Таким образом, шаблон будет заботиться о типе, являющемся указателем. Спасибо DeadMG за предложение. Вопрос все еще стоит, поскольку я не вижу причин, по которым вышесказанное не должно сработать, но оно работает и так.