【发布时间】:2020-04-13 21:55:59
【问题描述】:
在编写一些容器类时,我很想避免使用 size_t 来进行容量和迭代,以涵盖所有情况。假设我只想要一个 50 大小的东西,一个 unsigned char 就可以了。但是我怎样才能从给定的所需容量中模板化这种类型呢?有任何类型特征吗?
template<class T, size_t capacity> MyBuffer{
...
using IDX = intRequired<capacity>; // desired
...
T & At(IDX at);
IDX Lenght();
}
【问题讨论】:
-
C++ 库中没有这样的特征。但是根据
numeric_limits,自己实现一个并不难。 -
没有现有的类型特征可以满足您的要求。但是您可以自己创建一个,例如使用
constexpr语句来计算保存capacity值(1、2、4 或 8)所需的最小字节大小,然后使用一些模板特化来选择合适的数据基于该字节大小的类型(uint8_t、uint16_t、uint32_t、uint64_t)。 -
@walnut 我想我不明白你的意思。要访问、存储或测试容量(或大小,或使用 [] 或 At() 访问,如在 sn-p 中),用户需要一个类型
-
@RemyLebeau 它超出了我的模板能力......
-
@walnut "Capacity" /= "size",不是一般的。这可能是一个具有指定最大容量的缓冲区,但它可能在任何时候包含更少的元素。
标签: c++ templates metaprogramming typetraits