【发布时间】:2016-05-26 21:55:58
【问题描述】:
假设我有
int foo(void* p, size_t size_in_bytes);
并假设输入foo 没有意义。我想成为一名优秀的编码员并应用 C++ 核心指南。具体来说,我想使用跨度而不是 (*, len) 对。好吧,span<void> 不会编译(不能添加到void *);和 span<char> 或 span<uint8_t> 等会暗示 foo 实际上需要字符,而它可能不会。
那么在这种情况下我应该使用span<something-with-size-1>,还是坚持使用void*?
【问题讨论】:
-
制作正确类型的函数模板?
-
template<typename T> int foo(T&&)可以。 -
@Jarod42:您假设存在正确的类型。如果该函数检查缓冲区是否与我的内存空间中的某个区域相交,例如映射到一个文件,该怎么办?
-
什么?
span看起来像是string_view的 GSL 通用版,完全不适用于这种情况。 -
@GuillaumeRacicot 为什么是转发参考? OP 只想要一个指针和一个大小,或者一些可以代表它的 C++ 东西,但
T&&可以是任何东西(右值引用、左值引用、指针等)
标签: c++ guideline-support-library