Me gustaría proporcionar una función de plantilla, que varía su implementación (-> especialización) de acuerdo con el tamaño del tipo de plantilla.especialización de plantilla según sizeof tipo
Algo parecido a esto (typecasts omitidas), pero sin el if/elseif:
template<class T>
T byteswap(T & swapIt)
{
if(sizeof(T) == 2)
{
return _byteswap_ushort (swapIt);
}
else if(sizeof(T) == 4)
{
return _byteswap_ulong(swapIt);
}
else if(sizeof(T) == 8)
{
return _byteswap_uint64(swapIt);
}
throw std::exception();
}
Sé que hay muchos caminos para llegar a mi meta, pero desde que tratar de aprender acerca SFINAE
y type traits
I' Me interesan particularmente las soluciones que utilizan esas técnicas para decidir en tiempo de compilación qué especialización elegir y qué llamadas no se admiten.
Tal vez la implementación de un rasgo de clase is_4ByteLong y el uso de impulso :: enable_if ...
Tengo que admitir, estoy atascado en este momento, así que gracias por cualquier ayuda o consejo
Buena respuesta, pero no haría una implementación predeterminada de 'ByteswapImpl'. De esta forma, obtendrá un error de compilación si la especialización necesaria no existe. – Job
Y la función puede ser estática, por lo que no se debe crear ningún objeto (similar a 'boost :: numeric_cast' y' boost :: numeric_conververt'). – Philipp
Tenía la impresión de que solo la plantilla de función * especialización parcial * no es compatible ... ¿Estoy equivocado? – Job