Tytuł jest trochę niejednoznaczny.Specjalizacja szablonów dla wielu typów
Powiedzmy mam szablon zdefiniowany jako:
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) ;
...
Wewnętrznie zarówno foo<signed>()
i foo<unsigned>()
robią dokładnie to samo. Jedynym wymaganiem jest, aby T
był typu 8-bitowego.
mogłem zrobić to poprzez stworzenie kolejny szablon wpisać zdefiniować standardowy typ na podstawie rozmiaru.
template < typename T, size_t N = sizeof(T) > struct remap ;
template < typename T, size_t > struct remap<1>
{
typedef unsigned char value;
}
...
Uwaga: szablony funkcji nie mogą mieć parametrów domyślnych. To rozwiązanie przenosi problem tylko do innego szablonu, a także wprowadza problem, jeśli ktoś próbował przekazać typ struktury jako parametr.
Jaki jest najbardziej elegancki sposób, aby rozwiązać ten problem bez powtarzania tych deklaracji funkcji?
To nie jest C++ 11 pytanie.
Czy próbowałeś użyć enable_if, aby sprawdzić rozmiar typu? Zakładam, że robisz to samo dla wszystkich wbudowanych typów tego samego rozmiaru? – Borgleader
@Borgleader enable_if oznacza C++ 11 – Twifty
SFINAE i [ 'enable_if'] (http://en.cppreference.com/w/cpp/types/enable_if) mogą być realizowane w C++ 03 również. – dyp