Deseo escribir una estructura de plantilla foo
de modo que foo<N>::value_type
sea el entero de mayor tamaño (redondeando) a N
. Por ejemplo, foo<32>::value_type => uint32_t
, foo<33>::value_type => uint64_t
y foo<72>::value_type => uint64_t
.Especialización de plantilla para un rango de valores
Para hacer esto necesito un medio elegante de proporcionar especializaciones parciales de foo
para un rango de valores, por ejemplo, 1 <= N <= 8
para devolver uint8_t, y así sucesivamente. ¿Hay alguna forma de lograr esto sin tener que especializar todo de 0 a 64.
No habrá una manera directa (como dijo Mark), pero tal vez algún truco inteligente de metaprogramación de plantillas. Buena pregunta, esperando ver las respuestas. –