Template typedef
Автор: Константин Григорьев
В C++ нельзя сделать шаблонные typedef'ы. Но, как известно, если нельзя, но очень хочется, то можно. Для этого используем такой trick: завернём нужный typedef в шаблонную структуру.
При этом сохраняется вся функциональность обычных шаблонов, включая полную и частичную специализацию. Вот, например, как использовать это в реальной ситуации (здесь мы хотим явно указывать кол-во бит в числе):
// declaration template< int BITS > struct TInt {}; template<> struct TInt<8> { typedef signed char T; } template<> struct TInt<16> { typedef short T; } template<> struct TInt<32> { typedef long T; } template<> struct TInt<64> { typedef __int64 T; } // usage // если число флагов перевалит за 32, достаточно просто поменять константу TInt<32>::T flags;
Идея позаимствована из Guru of the Week.
9 июня 2009