Я хотел бы предоставить шаблонную функцию, которая меняет ее реализацию (- > специализацию) в соответствии с размером шаблона.
Что-то похожее на это (опущенные типы), но без 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();
}
Я знаю, что есть много дорог для достижения моей цели, но поскольку я пытаюсь узнать о SFINAE
и type traits
, меня особенно интересуют решения, использующие эти методы, чтобы решить во время компиляции, какую специализацию выбрать и какие вызовы не допускаются.
Возможно, реализация признака класса is_4ByteLong и использование boost:: enable_if...
Я должен признать, что я застрял прямо сейчас, поэтому я благодарю вас за любую помощь или совет.