template<size_t N> struct select { typedef uint64_t result; };
template<> struct select<0> { typedef uint8_t result; };
template<> struct select<1> { typedef uint16_t result; };
template<> struct select<2> { typedef uint32_t result; };
template<size_t N>
struct foo
{
enum{D = (N > 32 ? 3 : (N > 16 ? 2 : (N > 8 ? 1 : 0)))};
typedef typename select<D>::result value_type;
value_type value;
};
在c++11你可以使用std::conditional
:
typedef
typename std::conditional<(N > 32), uint64_t,
typename std::conditional<(N > 16), uint32_t,
typename std::conditional<(N > 8), uint16_t, uint8_t>
::type>::type>::type value_type;
你可以決定哪一個是的可讀性。
不會有直接的方式(像馬克說),但也許一些聰明的模板元編程技巧。很好的問題,等待看到答案。 –