C++ 当您有std::string时,如何使用basic_istream

C++ 当您有std::string时,如何使用basic_istream,c++,C++,我有一个使用basic_istream作为参数的函数,我有一个std::string,其中包含我需要传递的数据。如何执行此操作?您可以将字符串数据放入流中: std::string x; std::stringstream ss(x); // put string into stream function_taking_stream(ss); 我有一个函数,它使用基本流作为参数 所以我假设你有一个函数,它接受一个从基本流模板中专门化的变量类型 …我有一个std::字符串,其中包含我需要传递的

我有一个使用basic_istream作为参数的函数,我有一个std::string,其中包含我需要传递的数据。如何执行此操作?

您可以将字符串数据放入流中:

std::string x;
std::stringstream ss(x); // put string into stream

function_taking_stream(ss);
我有一个函数,它使用基本流作为参数

所以我假设你有一个函数,它接受一个从基本流模板中专门化的变量类型

…我有一个std::字符串,其中包含我需要传递的数据

所以我假设你想把这些数据输入到istream参数中

我该怎么做


你没有。您不能将输出馈送到输入流

我认为OP的意思是他有一个
basic\u istream
可以读取,并且想要读取
std::string
,而不是
std::basic\u string

您可能应该首先写入基本_字符串,然后将其转换为std::字符串。如果要确保转换正确,可能需要一个合适的UTF-8到UTF-16转换器

如果您知道只处理ASCII字节,则可以执行以下操作:

std::basic_string<E> strTemp;
is >> strTemp;
std::string str( strTemp.begin(), strTemp.end() );
std::基本字符串strTemp;
是>>strTemp;
string str(strTemp.begin(),strTemp.end());
如果您有一个
basic_ostream
,您可以类似地首先从std::string构造一个
basic_string
,然后将其写入流


您可以“专门化”您的模板函数,这样,如果E恰好是char,转换就会很快。为此,您可以将这两个字符串作为非常量引用输入,专门的版本可以“交换”。

一个完整的工作示例,展示了如何使用boost属性树解析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;
}
#包括
#包括
#包括
#包括
使用boost::property_tree::ptree;
int main()
{
std::string jsonString(“{\'mykey\':\'myvalue\'”);
ptree-pt;
std::stringstream ss(jsonString);
读json(ss,pt);

std::难道不能使用“
basic\u istream
作为参数”,因为那是一个模板。你为什么不给我们展示实际的代码,这样我们就可以解决实际的问题呢?对我来说,这看起来像是一个家庭作业问题。基本流是用来输入的,你从中读取。你的意思是你想把它读入一个流还是你有一个基本流?大概你的函数是以底层字符类型为模板的。我没有actu所有代码。这不是一个家庭作业问题。我只是没有在STL中摸索iostream世界,并且通常避免使用它。尽管如此,我还是很感谢您查看它。我应该更精确一些。我正在尝试使用boost::property_tree::read_json。这需要两种签名样式,一种使用文件名,另一种使用基本的istream。我有一个std::s我可以(a)创建一个临时文件,(b)将我的JSON字符串写入其中,(c)关闭该文件,(d)调用read_JSON函数(按预期工作)和(e)删除临时文件。我希望使用另一个具有基本istream的read_json签名,并以某种方式将我的json字符串传递到该签名中,以避免整个临时文件。不重要,只是更干净。仅此而已?哇,我严重夸大了这个问题。我花了大约一个小时的时间试图理解MSDN…非常感谢!a一旦我的开发虚拟机重新启动,我就会试一试。雅虎!就是这样。非常感谢你,GMan!