我有一个使用basic_istream作为参数的函数,我有一个std :: string,其中包含我需要传递它的数据。我该怎么做?
答案 0 :(得分:9)
您可以将字符串数据放入流中:
std::string x;
std::stringstream ss(x); // put string into stream
function_taking_stream(ss);
答案 1 :(得分:1)
一个完整的工作示例,展示了如何使用boost property_tree解析json字符串:
#include <iostream>
#include <string>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
using boost::property_tree::ptree;
int main ()
{
std::string jsonString ("{ \"my key\": \"my value\" }");
ptree pt;
std::stringstream ss(jsonString);
read_json(ss, pt);
std::cout << pt.get<std::string>("my key") << std::endl;
return 0;
}
答案 2 :(得分:0)
我有一个使用basic_istream作为参数的函数......
所以我假设你有一个函数接受一个从basic_istream模板专用的变量。
...我有一个std :: string,其中包含我需要传递的数据。
所以我假设你想把这些数据提供给istream参数。
我该怎么做?
你没有。您无法将输出提供给输入流!
答案 3 :(得分:0)
我认为OP意味着他有一个basic_istream<E>
来读取并希望阅读std::string
,而不是std::basic_string<E>
。
您应该首先写入basic_string,然后将其转换为std :: string。如果您想确保转换正确,您可能需要一个正确的UTF-8到UTF-16转换器。
如果您知道您只处理ASCII字节,则可以执行以下操作:
std::basic_string<E> strTemp;
is >> strTemp;
std::string str( strTemp.begin(), strTemp.end() );
如果您有basic_ostream<E>
,您可以先从std :: string中构建一个basic_string<E>
,然后将其写入流中。
你可以“专门化”你的模板功能,这样如果E恰好是char,转换很快。为此,您可以将两个字符串输入为非const引用,而专用版本可以只是“交换”。