Я хотел бы определить простую функцию шаблона, которая принимает значение времени выполнения и определяет, является ли он членом некоторого набора возможных значений.
Использование:
int x; // <- pretend this came from elsewhere...
if (isoneof(x, {5,3,9,25}) ...
Что-то вроде:
template <typename T, size_t size>
bool isoneof(T value, T (&arr)[size])
{
for (size_t i = 0; i < size; ++i)
if (value == arr[i])
return true;
return false;
}
Я предполагаю, что это обречено на сбой, поскольку я не вижу, как можно создать статический массив inline.
Я могу использовать:
int kPossibilities[] = {5,3,9,25};
if (isoneodf(6, kPossibilities)) ...
При незначительном изменении isoneof:
template <typename T1, typename T2, size_t size>
bool isoneof(T1 value, const T2 (&arr)[size])
{
for (size_t i = 0; i < size; ++i)
if (value == arr[i])
return true;
return false;
}
Это также делает его более гибким.
Есть ли у кого улучшения? Лучший способ определить "набор статических значений inline" ?