文档说size_type
中的std::vector
通常是size_t
,这很合理,因为实现可以选择使用不同的方法。
但是为什么size_type = size_t
中有std::array
。特别是在这里,由于std::array
经常用在小型µC
上,最好让实现具有一定的自由度。
这是文档缺陷吗?
答案 0 :(得分:1)
之所以这样定义是因为size_t
被定义为对所有数组都足够。如果要为较小的数组使用较小的类型,则可以随时根据constexpr
的值来缩小。
template <typename Array>
struct small_array_size
{
using type = size_t
};
template <typename T, size_t N, typename = std::enable_if_t<N < 256>>
struct small_array_size<std::array<T, N>>
{
using type = uint8_t;
};
template <typename T, size_t N, typename = std::enable_if_t<N < 65536>>
struct small_array_size<std::array<T, N>>
{
using type = uint16_t;
};
template <typename Array>
using small_array_size_t = typename small_array_size<Array>::type;