首页 > 解决方案 > 有没有一种方法可以在不复制数据的情况下从 string_view 创建字符串流?

问题描述

我认为这是一个非常直截了当的问题。我特别想使用std::get_time,但它需要某种流才能使用。我在 a 中传递数据,string_view并希望避免复制它只是为了解析日期。

标签: c++c++17stringstream

解决方案


您可以使用 Boost.Iostreams 库轻松做到这一点:

#include <boost/iostreams/device/array.hpp>
#include <boost/iostreams/stream.hpp>

#include <iostream>
#include <string>

int main() {
    std::string_view buf{"hello\n"};
    boost::iostreams::stream<boost::iostreams::basic_array_source<char>> stream(buf.begin(), buf.size());

    std::string s;
    stream >> s;
    std::cout << s << '\n';
}

你应该能够做到这一点,std::stringstreamstd::basic_stringbuf<CharT,Traits,Allocator>::setbufC++ 标准搞砸了它的要求:

[of setbuf] 的效果是实现定义的:一些实现什么都不做,而一些实现清除std::string当前用作缓冲区的成员并开始使用用户提供的大小为 的字符数组n,其第一个元素由 指向s,作为缓冲区和输入/输出字符序列。


推荐阅读