タイトルは少しあいまいです。
次のように定義されたテンプレートがあるとします。
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 に関する質問ではありません。