template specialization and different return type
ふと、特殊化されたテンプレートごとに戻り値をかえたくなった。ようするにこういうこと。
template<> int foo<short>(); template<> long foo<int>();
ところが、これは一般化されたテンプレートを宣言できないのでうまくいかない。template parameter と戻り値が一緒なら話は簡単なのだが。
template<typename T> T foo();
で、しばらく考えて出てきたのが以下。
template<typename T> struct TypeHolder; template<short> struct TypeHolder { typedef short ValueType; }; template<int> struct TypeHolder { typedef long ValueType; }; template<typename T> typename TypeHolder<T>::ValueType foo(); template<> int foo<short>(); template<> long foo<int>();
template って奥が深いですね。まぁ、なんか常套手段な気がするけど。