键入函数从类型T到类型整数,其中sizeof(整数)> = sizeof(T)

Pol*_*mer 1 c++ c++11

我想要一个类型函数,它采用类型T并返回我满意的最小整数类型sizeof(I) >= sizeof(T).

有关如何处理此问题的任何想法,见解或评论?可以使用C++ 11,欢迎使用C++ 14.

对于好奇:我正在研究编程元素.我有一个函数,它从一个组(如int)映射到它自己.令x在函数的域中,并且通过将f应用于x多次来获得y.我想知道在得到y之前我有多少次将函数应用于x.该值称为距离,是一些整数.如果以k位指定组类型,则不同值的总数为pow(2,k).然后,元素之间可能的跳跃总数pow(2,k) - 1.因此,具有与组类型相同大小的整数类型足够大以容纳该距离函数可以返回的所有可能距离.

mfo*_*ini 6

这应该这样做:

template<typename T>
struct identity {
    typedef T type;
};

template<typename T, typename Head, typename... Tail>
struct best_type {
    typedef typename std::conditional<
        sizeof(Head) >= sizeof(T), 
        identity<Head>,
        best_type<T, Tail...>
    >::type::type type;
};

template<typename T>
struct type_to_integral {
    typedef typename best_type<T, uint8_t, uint16_t, uint32_t, uint64_t, uint_least64_t>::type type;
};
Run Code Online (Sandbox Code Playgroud)

现场演示这里.