Название немного неоднозначное.Шаблон специализации для нескольких типов
Допустим, у меня есть шаблон, определяемый как:
template < typename T >
void foo (int x) ;
template <>
void foo<char> (int x) ;
template <>
void foo<unsigned char> (int x) ;
template <>
void foo<short> (int x) ;
...
Внутренне как foo<signed>()
и foo<unsigned>()
делать то же самое. Единственное требование - T
быть 8-битным типом.
Я мог бы сделать это, создав другой шаблон для ввода типа стандартного типа по размеру.
template < typename T, size_t N = sizeof(T) > struct remap ;
template < typename T, size_t > struct remap<1>
{
typedef unsigned char value;
}
...
Примечание. Шаблоны функций не могут иметь параметры по умолчанию. Это решение только переносит проблему на другой шаблон, а также вводит проблему, если кто-то попытался передать тип структуры в качестве параметра.
Что является самым элегантным способом решения этой проблемы без повторения этих объявлений функций?
Это не вопрос C++ 11.
Вы пытались использовать enable_if для проверки размера типа? Я предполагаю, что вы делаете то же самое для всех встроенных типов одинакового размера? – Borgleader
@Borgleader enable_if is C++ 11 – Twifty
SFINAE и ['enable_if'] (http://en.cppreference.com/w/cpp/types/enable_if) могут быть реализованы также на C++ 03. – dyp