У меня есть три функции, которые делают почти то же самое, но этот процесс немного отличается в зависимости от типа параметров:Лучший способ для отправки на хорошей функции шаблона
template<typename T> void Func1(const T *in, T *out)
{
static_assert(std::is_same<T, INT8>::value
|| std::is_same<T, UINT8>::value
|| std::is_same<T, INT16>::value
|| std::is_same<T, UINT16>::value, "");
//...
}
template<typename T> void Func2(const T *in, T *out)
{
static_assert(std::is_same<T, INT32>::value || std::is_same<T, UINT32>::value, "");
//...
}
template<typename T> void Func3(const T *in, T *out)
{
static_assert(std::is_same<T, float>::value || std::is_same<T, double>::value, "");
//...
}
Но я не хочу пользователь должен решить, какой вызов функции, поэтому я пытаюсь сделать это автоматически. К сожалению, до сих пор (я новичок C++), единственный способ, которым я знаю, был бы:
template<typename T> void Function(const T *in, T *out)
{
if (std::is_same<T, UINT8>::value
|| std::is_same<T, UINT16>::value
|| std::is_same<T, INT8>::value
|| std::is_same<T, INT16>::value)
{
Func1(in, out);
return ;
}
if (std::is_same<T,INT32>::value || std::is_same<T,UINT32>::value)
{
Func2(in, out);
return ;
}
if (std::is_same<T,float>::value || std::is_same<T,float>:: double)
{
Func3(in, out);
return ;
}
}
Я считаю это решение абсолютно некрасиво, и я хотел бы знать, если что-то лучше/быстрее/более изящным возможно?
Что такое 'беззнаковое float' и' беззнаковое double'? – WhiZTiM
Можете ли вы использовать C++ 11? – Garf365
@ Garf365: да! – FiReTiTi