Me gustaría definir una función de plantilla simple que toma un valor de tiempo de ejecución y determina si es miembro de algún conjunto de valores posibles.C++: ¿Hay alguna manera de definir una matriz estática en línea?
Uso:
int x; // <- pretend this came from elsewhere...
if (isoneof(x, {5,3,9,25}) ...
Algo así como:
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;
}
Asumo que esto está condenado al fracaso, ya que no veo cómo se puede crear una matriz en línea estática.
que puede utilizar:
int kPossibilities[] = {5,3,9,25};
if (isoneodf(6, kPossibilities)) ...
Con un pequeño cambio en 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;
}
Lo que también hace que sea un poco más flexible.
¿Alguien tiene una mejora para ofrecer? ¿Una mejor manera de definir un "conjunto de valores estáticos en línea"?
Es cuestión de tiempo para C++ 1x, ¿no es así? Los literales de matriz son perfectamente válidos allí ... – xtofl
@xtofl, ya es hora ... –
¡Estamos deseando que llegue! ;) – Mordachai