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