问题标签 [guideline-support-library]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 我应该用 GSL 跨度替换 (void*, size) 吗?
假设我有
foo
并假设打字没有意义。我想成为一名优秀的编码员并应用 C++ 核心指南。具体来说,我想使用跨度而不是 (*, len) 对。好吧,span<void>
不会编译(不能添加到 a void *
);and span<char>
or span<uint8_t>
etc. 意味着 foo 实际上需要字符,但它可能不会。
那么span<something-with-size-1>
在这种情况下我应该使用 a 还是坚持使用void*
?
c++ - 使用 GSL 跨度时避免丢失 __restrict__
我(大部分)喜欢新的 C++ 核心指南倡议,以及指南支持库提供的内容。具体来说,我想span
更多地使用 s。__restrict__
但是,当我想/需要使用它时,我遇到了不属于 C++ 的问题。
更具体地说:没有span
's,我会声明:
但是,如果我现在声明:
__restrict__
除非我的编译器超级智能,否则我不会得到效果。我可以向 gcc/clang/msvc 的众神祈祷并说:
或者,我可以调整 GSLspan<T>
实现,以便T* begin
和T* end
指针本身是__restrict__
'ed。但是,完全不确定这是否会得到尊重。
那么,我可以以某种方式强制__restrict__
'ion 吗?还是我应该放弃它?这种方式让切换到span
's 的乐趣消失了...
c++ - 强制 gsl::as_span 返回一个 gsl::span?
给定以下函数,采用:只读浮点跨度(动态或任何静态大小):
假设我有一个vector<float>
. 将其作为参数传递是行不通的,但 using 也不行gsl::as_span
:
以上不编译。显然gsl::as_span()
返回一个gsl::span<float>
. 除了不理解为什么不可能隐式转换之外gsl::span<const float>
,还有没有办法强制gsl::as_span()
返回只读跨度?
c++ - 如何使用 gsl::span 并指明所有权?
我想写一个函数:
- 将指针作为参数
- 将长度作为参数
- 拥有指针指向的内存(例如,它可能释放它,或者在某些数据结构中为它构造一个 unique_ptr 等)
现在,如果我想要 1+2,我会使用gsl::span
. 如果想要 1+3,我会使用owner<T*>
. 但是当我想要这三个时我该怎么办?我应该通过一个owner<gsl::span<T>>
吗?还有什么?
笔记:
- 您可能不会假设指针在堆中。
std::vector
要求太多了。该函数不应要求调用者构造一个std::vector
.
c++ - 我应该返回 gsl::span而不是 const std::vector&
我有一个带有 std::vector<int> 成员的类和一个返回对该向量的 const 引用的成员函数。
我计划将成员类型更改为不同的数组,如容器类型,具有足够的功能和更小的内存占用(例如 std::experimental::dynarray、std::unique_ptr<int[]>)。因此,我认为最好不要将真实容器作为 const 引用返回,而是将元素的视图作为 gsl::span<const int> 返回。
但这会破坏与 const vector<int>& 一起使用的代码,因为不能使用相同未修改向量的两个 span 实例来迭代元素:
这会打印 0 0 然后崩溃,因为测试 it != end 永远不会失败。基于范围的 for 循环当然可以工作,但是这个循环是有效的,因此也必须按预期工作。我曾预料到,来自同一容器的相同范围的所有跨度都是相等的,因此这些跨度中的任何一个的迭代器都是可比较的(当然容器未修改)。当然,事实并非如此是有充分理由的。
所以我的问题是,将这种视图返回到数组元素的最佳方法是什么,比如容器,其类型对调用者不可见。
c++ - CPPCoreGuidelines 跨度对于 T** 接口?
在数字信号处理中,音频通常作为通道和样本的 2D 阵列传递,即
我使用的很多库都期望这种格式。
就我自己的代码而言,为了更安全地操作,有没有一种方法可以用来gsl::span<T>
在这些缓冲区上设置视图?
(我了解 1D,但我不确定如何设置 2Dfloat**
数组)
提前致谢。
c++ - 如何在 CMake 中选择 GSL Lite 和 Microsoft GSL?
我正在编写一些 C++ 代码,例如使用gsl::span
. 现在,我希望能够使用Microsoft/Neil Macintosh 的 GSL或 Martin Moene 的GSL Lite。使用 CMake 作为我的构建系统,我将如何最好地做到这一点?
c++ - 函数返回的 gsl::span 有错误的字节
我有一个函数解析 ZeroMQ 多部分消息并填充包含以下内容的结构gsl::span<uint8_t>
:
调用此方法的函数执行以下操作:
问题是打印的字节msg.str()
和内部parseForwarderToClient
是相同的,而在调用函数中打印的字节是不同的(然后我的代码崩溃了)。
我在这段代码中做错了什么(我仍然是 C++11/14 和 gsl 功能的新手)?
c++ - 如何正确安装包含 GSL(指南支持库)的标头
在make install
我安装了我的库和头文件之后
客户将像这样使用该库:
可能的解决方案
- 创建
include/MyLib/gsl/
并将其添加为单独的包含目录,CMakeLists.txt
以MyLibConfig.cmake
防止失败#include <gsl/...>
- 我试过了
sudo apt install libgsl-dev
,find_package(GSL REQUIRED)
但那是https://www.gnu.org/software/gsl/(名称冲突)
我在github 存储库上找不到任何与此相关的问题,因此应该有一个我错过的简单解决方案(对其他人来说很明显)。