Модификатор параметра шаблона

У меня есть вопрос, связанный с шаблонами.

template <typename A, typename B>
void someFunction (A* array, const B& numEl);

Я хочу, чтобы numEl (-> numberOfElements) был без знака, но const unsigned не скомпилируется. Число элементов в массиве никогда не бывает отрицательным числом, и я всегда буду использовать long, int или short, поэтому для меня имеет смысл сделать numEl unsigned

4

Решение

Если вы хотите, чтобы пользователь вызывал вашу функцию только с неподписанными типами, вы можете использовать что-то вроде этого:

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 в качестве константной ссылки.

POC на Ideone

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]