Итак, у меня есть этот действительно уродливый код:
template <typename T>
std::conditional_t<sizeof(T) == sizeof(char),
char,
conditional_t<sizeof(T) == sizeof(short),
short,
conditional_t<sizeof(T) == sizeof(long),
long,
enable_if_t<sizeof(T) == sizeof(long long),
long long>>>> foo(T bar){return reinterpret_cast<decltype(foo(bar))>(bar);}
Я использую вложенные conditional_t
для создания своего рода case-statement. Есть ли что-то, что делает это более элегантно, или мне нужно приготовить собственное шаблонное выражение case?
Примечание. Я действительно знаю, что такое использование reinterpret_cast
плохо: Почему reinterpret_cast Force copy_n не выполняет принудительное приведение типов между типами одинакового размера?