问题标签 [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.

0 投票
3 回答
1967 浏览

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*

0 投票
0 回答
113 浏览

c++ - 为什么 Xcode 认为 gsl::span 需要两个模板参数?

我目前正在熟悉 GSL,我编写了以下非常简单的示例只是为了测试其gsl::span工作原理。Xcode 似乎有问题,你可以在这里看到:

在此处输入图像描述

这编译和运行得很好,应该是这样,但同时 Xcode 认为gsl::span需要另一个模板参数,这很奇怪。我从未见过任何编译器或 IDE 给出实际错误(不仅仅是警告)然后编译就好了。

gsl::span可以推断出数组的大小,因此不需要第二个模板参数。如果我将参数类型更改为gsl::span<int,5>,错误就会消失,但这当然不是真正的解决方案。

0 投票
0 回答
164 浏览

c++ - 使用 GSL 跨度时避免丢失 __restrict__

我(大部分)喜欢新的 C++ 核心指南倡议,以及指南支持库提供的内容。具体来说,我想span更多地使用 s。__restrict__但是,当我想/需要使用它时,我遇到了不属于 C++ 的问题。

更具体地说:没有span's,我会声明:

但是,如果我现在声明:

__restrict__除非我的编译器超级智能,否则我不会得到效果。我可以向 gcc/clang/msvc 的众神祈祷并说:

或者,我可以调整 GSLspan<T>实现,以便T* beginT* end指针本身是__restrict__'ed。但是,完全不确定这是否会得到尊重。

那么,我可以以某种方式强制__restrict__'ion 吗?还是我应该放弃它?这种方式让切换到span's 的乐趣消失了...

0 投票
2 回答
1396 浏览

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()返回只读跨度?

0 投票
1 回答
1333 浏览

c++ - 如何使用 gsl::span 并指明所有权?

我想写一个函数:

  1. 将指针作为参数
  2. 将长度作为参数
  3. 拥有指针指向的内存(例如,它可能释放它,或者在某些数据结构中为它构造一个 unique_ptr 等)

现在,如果我想要 1+2,我会使用gsl::span. 如果想要 1+3,我会使用owner<T*>. 但是当我想要这三个时我该怎么办?我应该通过一个owner<gsl::span<T>>吗?还有什么?

笔记:

  • 您可能不会假设指针在堆中。
  • std::vector要求太多了。该函数不应要求调用者构造一个std::vector.
0 投票
2 回答
1536 浏览

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 循环当然可以工作,但是这个循环是有效的,因此也必须按预期工作。我曾预料到,来自同一容器的相同范围的所有跨度都是相等的,因此这些跨度中的任何一个的迭代器都是可比较的(当然容器未修改)。当然,事实并非如此是有充分理由的。

所以我的问题是,将这种视图返回到数组元素的最佳方法是什么,比如容器,其类型对调用者不可见。

0 投票
0 回答
143 浏览

c++ - CPPCoreGuidelines 跨度对于 T** 接口?

在数字信号处理中,音频通常作为通道和样本的 2D 阵列传递,即

我使用的很多库都期望这种格式。

就我自己的代码而言,为了更安全地操作,有没有一种方法可以用来gsl::span<T>在这些缓冲区上设置视图?

(我了解 1D,但我不确定如何设置 2Dfloat**数组)

提前致谢。

0 投票
0 回答
759 浏览

c++ - 如何在 CMake 中选择 GSL Lite 和 Microsoft GSL?

我正在编写一些 C++ 代码,例如使用gsl::span. 现在,我希望能够使用Microsoft/Neil Macintosh 的 GSL或 Martin Moene 的GSL Lite。使用 CMake 作为我的构建系统,我将如何最好地做到这一点?

0 投票
1 回答
381 浏览

c++ - 函数返回的 gsl::span 有错误的字节

我有一个函数解析 ZeroMQ 多部分消息并填充包含以下内容的结构gsl::span<uint8_t>

调用此方法的函数执行以下操作:

问题是打印的字节msg.str()和内部parseForwarderToClient是相同的,而在调用函数中打印的字节是不同的(然后我的代码崩溃了)。

我在这段代码中做错了什么(我仍然是 C++11/14 和 gsl 功能的新手)?

0 投票
0 回答
1405 浏览

c++ - 如何正确安装包含 GSL(指南支持库)的标头

 

make install我安装了我的库和头文件之后

 


客户将像这样使用该库:

 


可能的解决方案

  1. 创建include/MyLib/gsl/并将其添加为单独的包含目录CMakeLists.txtMyLibConfig.cmake防止失败#include <gsl/...>
  2. 我试过了sudo apt install libgsl-devfind_package(GSL REQUIRED)但那是https://www.gnu.org/software/gsl/(名称冲突)

我在github 存储库上找不到任何与此相关的问题,因此应该有一个我错过的简单解决方案(对其他人来说很明显)。