Это определенно тривиальный вопрос, но я не мог понять, как это сделать.
У меня есть функция шаблона, скажем template <unsigned int N> void my_function()
. Теперь у меня есть две разные реализации для my_function
, первая должна использоваться, если N
больше, чем, скажем, 100, другая, если N
меньше этого.
Я попытался использовать SFINAE следующим образом:
template <unsigned int N, typename = enable_if <N >= 100> :: type> my_function()
{
// First implementation
}
template <unsigned int N, typename = enable_if <N < 100> :: type> my_function()
{
// Second implementation
}
Но это объявляет одну и ту же функцию два раза. Затем я попытался сделать что-то вроде
template <unsigned int N, bool = (N >= 100)> my_function();
И затем реализуем две функции с двумя разными значениями логического. Нет успеха, поскольку это частичная специализация.
Затем я попытался обернуть N
в качестве параметра struct и bool в вызове функции, но он специализируется на функции-члене, прежде чем специализировать класс, что не может быть выполнено.
Есть ли разумный способ сделать это?