这个问题不可能有一般的答案。
对于一个函数来说,它需要一个span<T>
方法,它需要一个连续的值数组,没有任何形式的所有权转移。如果该描述不能合理地代表正在发生的事情,那么它不应该采用span<T>
.
例如:
如果该函数检查缓冲区是否与我的内存空间中的一个区域相交,例如映射到一个文件,该怎么办?
这听起来不像span<T>
。听起来您应该有一个简单的聚合,其名称可以清楚地说明其含义:
struct memory_region
{
void* p;
size_t size_in_bytes;
};
你甚至可以给它一个成员函数来测试交叉点。如果您正在制作一个处理此类内存区域的系统,我可能会建议使用构造函数等更加封装的类类型。
函数采用什么类型应该解释数据的含义。这个意思最好是一般意义上的,但至少,它应该说明它对所讨论的功能意味着什么。
还有一件事:
或span<uint8_t>
等会暗示 foo 实际上期望字符
不,它不会。虽然uint8_t
几乎可以肯定与 . 具有相同的大小unsigned char
,但这并不意味着人们期望能够将字符数组传递给任何需要span<uint8_t>
. 如果该函数想要宣传它接受字符,它会使用unsigned char
.
我的意思是说span<whatever>
会暗示函数 expectwhatever
的。
是的,对span
s 的要求是传递给定大小的实际数组T
s。