更好的替代品?
A better replacement for istrstream?
>istrstream
非常适合我的需求 - 基本上,使用固定的字符缓冲区,并给我一种简单的方法来提取行getline()
并测试eof()
我正在将我们的项目切换到 C++ 17 合规性 - 这已经弃用了istrsteam
- 显然是因为有太多C++程序员无法理解固定缓冲区内存管理(你是认真的吗?!
无论如何,istringstream
提供了相同的使用语义,但它现在需要在构造时复制整个固定字符缓冲区。
这是一种反模式。
我正在寻找的是一种使用string_view
代替istringstream
string
的方法,或者替代本身处理外部管理的固定缓冲区的stringstream
的更好替代品(它只需要指向它,它永远不需要担心管理该资源,就像strstream
所做的那样)。
目前,在VS 2017中,这是非法的,如果我理解正确的话,在当前最先进的C++中,任何地方都是非法的(如果我错了,我相信你会纠正我!
std::string_view raw_view(reinterpret_cast<const char *>(raw_buffer.get()), raw_buffer.size());
std::istringstream raw_stream(raw_view);
所以 - 想法?
注意:Peter Sommerlad 在这里为C++标准机构提出了一个确切的想法: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0448r1.pdf
暂时继续使用istrstream
。在标准采用 P0448(使用std::span<char>
作为流缓冲区的源/目标)或 P0408(将数据移入/移出stringstream
s 的能力)之前,它可能不会被删除。这两种方法都可以很好地满足您的需求。
话虽如此,如果您要做的就是在n
s 之间获取子字符串,那么仅使用正则表达式搜索会更有效(即使有上述建议)。或者只是常规搜索,因为您只是在寻找n
.这将为您提供一对表示一条线的迭代器。使用 iostreams 逐行处理已加载的字符缓冲区是矫枉过正的,并且永远不会像替代方案那样高效。
- C++:将控制台输出存储在宏中更好吗
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 初始化具有非默认构造函数的std::数组项的更好方法
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 为什么新的随机库比std::rand()更好
- 寻找一种更好的方法来表示无符号字符数组
- 哪种方法更好,性能明智
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 什么是更好的做法?通过指针或标识符传递类成员?
- 寻求更好地理解标准::访问
- 线程消息传递或更好:在"大师班"中访问其他班级的成员
- 有没有更好的方法来处理异常? try-catch块真的很丑
- 如何更好地检查两个 char 变量是否在一组值中?
- 有没有更好的方法对C++中的三个整数进行排序?
- 什么模板用法在阶乘中更好
- 平面缓冲区可以利用向量中的 0 吗?还是其他小波比哈尔变换更好?
- 更好的替代品?
- 深度复制cv::垫子替代品,哪个更好?
- std::vector<std::unique_ptr>有什么更好的替代品<T>吗?
- C++ - STL的地图和Boost的unordered_map更好的替代品?