- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我有一个成员变量std::vector<std::string>
在一个类中,我想使用 gsl::array_view
的组合从成员函数返回它作为不可变 View 和 gsl::cstring_view
.不幸的是,以下内容无法编译:
class C {
public:
gsl::array_view<const gsl::cstring_view<>> getVectorOfStrings() const
{
return _vectorOfStrings;
}
private:
std::vector<std::string> _vectorOfStrings;
};
这是因为没有 cstring_view
的容器那array_view
可以创建自。所以我的问题是:有没有一种方法可以在不显式添加类似 std::vector<gsl::cstring_view<>>
类型的成员的情况下使用这种构造? ,这显然是不可取的?
编辑
在我看来,这种“转换”观点可能具有更普遍的用途。考虑拥有一个 vector
拥有指针,例如 std::vector<std::shared_ptr<T>>
,我想将其作为 array_view
公开给该类的用户原始指针:gsl::array_view<const T*>
在不公开我的实现定义的存储方法的情况下。想法?
最佳答案
根据定义, View 通常只提供对现有对象的引用。因此,无法创建正常的 array_view<const cstring_view<>>
。无需先创建匹配的容器,例如一个vector<const cstring_view<>>
.
然而,您可以为 gsl::array_view<const cstring_view<>>
创建自己的特化,创建一个 cstring_view<>
按需(调用索引运算符时以及取消引用迭代器时)。虽然与原始方法相比,这会为您节省动态内存分配并减少内存占用,但我认为在大多数情况下不值得增加复杂性。
如果您想遵循编辑中描述的通用方法,您可能需要查看 boost::transform_iterator
- 直接使用或作为您自己的通用灵感 transform_array_view
类(我敢肯定,这将是对 gsl 或 boost 的一个受欢迎的补充)。
关于c++ - gsl::array_view<const gsl::cstring_view<>> 来自 std::vector<std::string>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33393412/
我刚刚看过 Herb Sutter 的“默认情况下编写良好的 C++14...”(https://www.youtube.com/watch?v=hEx5DNLWGgA)的第一部分,我有一个(可能是愚
我在 Windows 8 上将 C++ AMP 与 Visual Studio 2012 结合使用。我有一个案例,其中我有 2D array_view、experimentData 和 1D arra
假设我有一些类层次结构,其中有几个 virtual返回容器引用的函数: #include #include #include #include #include class Interfac
我已经开始尝试使用 C++ AMP。我创建了一个简单的测试应用程序只是为了看看它可以做什么,但是结果让我很惊讶。考虑以下代码: #include #include "Timer.h" using n
如果我有一个 concurrency::array_view 在 concurrency::parallel_for_each 循环中运行,我的理解是我可以在 CPU 上继续其他任务,同时循环正在执行
我想要一个与维度无关的模板(对 3d 和 4d 都有用),大部分操作将在第一维被剥离的子矩阵上执行。 这就是我想要的 template class MMapMatrixTemplate{ publi
我正在尝试使用一个数组,例如 int myarray[2][3]初始化 array_view目的。我试过了 array_view a(2,3, myarray);但是,这不起作用。我也希望能够用 ve
void Addx(float *z, float *x, float *y, size_t m, size_t n) { vector vx(m*n); vector vy(m*n); vector
在最近的几次 session 演讲中,我听到 Bjarne Stroustrup 和其他人提到了 C++ 的新编码指南以及一些支持它们的类型。 具体来说,我记得 the example of span
我的问题与 Boost.MultiArray 类有关。我了解如何将 multi_array 对象转换为 array_view 对象,如下代码所示: int my_row = 5;
我正在尝试消费 Windows::Gaming::Input::RawGameController通过C++/WinRT图书馆。 调用 RawGameController::GetCurrentRea
我写了一个小的测试函数,它的行为与我想要的不一样。 基本上,它应该读取一个数组并写回它的内容(稍后,当它起作用时,它应该做更多,但现在即使这样也会失败)。 调试 GPU 代码时,我看到前几次迭代(以某
假设我有一个成员变量std::vector在一个类中,我想使用 gsl::array_view 的组合从成员函数返回它作为不可变 View 和 gsl::cstring_view .不幸的是,以下内容
我是一名优秀的程序员,十分优秀!