У меня есть вопрос, связанный с шаблонами.
template <typename A, typename B>
void someFunction (A* array, const B& numEl);
Я хочу, чтобы numEl (-> numberOfElements) был без знака, но const unsigned
не скомпилируется. Число элементов в массиве никогда не бывает отрицательным числом, и я всегда буду использовать long, int или short, поэтому для меня имеет смысл сделать numEl unsigned
Если вы хотите, чтобы пользователь вызывал вашу функцию только с неподписанными типами, вы можете использовать что-то вроде этого:
template<typename A, typename B, typename = typename std::enable_if<std::is_unsigned<B>::value>::type>
void someFunction(A * array, B numEl) {
// do something
}
Также обратите внимание, что, поскольку вы имеете дело с целочисленными типами для B, нет необходимости принимать numEl в качестве константной ссылки.
Других решений пока нет …