標題有點模棱兩可。多種類型的模板專業化
可以說我有定義爲一個模板:
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是C++ 11 – Twifty
SFINAE和['enable_if'](http://en.cppreference.com/w/cpp/types/enable_if)也可以在C++ 03中實現。 – dyp