У меня есть шаблонный (CUDA, хотя относятся к C++) функции (которую я упростил, чтобы сделать точку) следующим образом:«Бессмысленно сравнение» предупреждение в шаблоне с определенными значениями
template<unsigned windowsize>
__global__ void someFunc()
{
if (threadIdx.x < (32 - windowsize * 2))
{
// ... something exciting
}
}
Я использую код с «windowsize» установлен с 1-16. Компиляция с NVCC в Visual Studio 2013, я получаю следующее предупреждение:
warning : pointless comparison of unsigned integer with zero
Это, очевидно, для случая, когда windowsize = 16 (для которого, если оператор имеет значение threadIdx.x < 0, то есть ложь), так что предупреждение имеет смысл.
Я рассмотрел аналогичный вопрос: How to silence a particular "pointless comparison of unsigned with zero" warning?, но это в ситуации, когда используется typedef, а не шаблон, поэтому ответы не подходят.
Есть ли лучший способ построения этой функции, которая обеспечит такую же функциональность без предупреждения? Я мог бы создавать отдельные функции, которые имеют отношение к windowsize больше, чем и меньше, чем 16 по-разному, но на самом деле функция более сложная, и я бы чувствовал, что я излишне дублирую и усложняю код, что является целым смыслом при использовании шаблона для начала с.
Хотя это решает проблему, это дополнительные строки кода, которые делают то, что уже делает компилятор для меня. – valjean