Войти
ПрограммированиеПодсказкиОбщее

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.

#C++, #шаблоны

9 июня 2009