我似乎记得有某种方法可以执行这样的操作,但是我找不到它:
template <int SIZE>
struct S {
uint_least<SIZE>::type my_uint; // <-- I made this up, but I am looking for something equivalent
};
有这样的事情吗?如果是这样,真正的语法是什么?
答案 0 :(得分:0)
我最终这样做了:
#include <cstdint>
template <std::size_t N>
struct sized_ints : sized_ints<N-1>
{};
template <>
struct sized_ints<65>
{};
template <>
struct sized_ints<0>
{};
template <>
struct sized_ints<33>
{
using int_fast_t = std::int_fast64_t;
using int_least_t = std::int_least64_t;
using uint_fast_t = std::uint_fast64_t;
using uint_least_t = std::uint_least64_t;
};
template <>
struct sized_ints<64> : sized_ints<33>
{
using int_t = std::int64_t;
using uint_t = std::uint64_t;
};
template <>
struct sized_ints<17>
{
using int_fast_t = std::int_fast32_t;
using int_least_t = std::int_least32_t;
using uint_fast_t = std::uint_fast32_t;
using uint_least_t = std::uint_least32_t;
};
template <>
struct sized_ints<32> : sized_ints<17>
{
using int_t = std::int32_t;
using uint_t = std::uint32_t;
};
template <>
struct sized_ints<9>
{
using int_fast_t = std::int_fast16_t;
using int_least_t = std::int_least16_t;
using uint_fast_t = std::uint_fast16_t;
using uint_least_t = std::uint_least16_t;
};
template <>
struct sized_ints<16> : sized_ints<9>
{
using int_t = std::int16_t;
using uint_t = std::uint16_t;
};
template <>
struct sized_ints<1>
{
using int_fast_t = std::int_fast8_t;
using int_least_t = std::int_least8_t;
using uint_fast_t = std::uint_fast8_t;
using uint_least_t = std::uint_least8_t;
};
template <>
struct sized_ints<8> : sized_ints<1>
{
using int_t = std::int8_t;
using uint_t = std::uint8_t;
};