Я хотел бы определить простую шаблонную функцию, которая принимает значение времени выполнения и определяет, является ли она членом некоторого набора возможных значений.
Использование:
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;
}
Я предполагаю, что это обречено на провал, так как я не понимаю, как можно создать статический массив встроенным.
Я могу использовать:
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;
}
Что также делает его более гибким.
Кто-нибудь может предложить улучшение? Лучший способ определить «набор встроенных статических значений» ?