c++ - C++,可以采用ifstream或istringstream的函数

标签 c++ ifstream istringstream

我有一个函数do_something从流中读取未签名的字符。
可以从给定文件名的文件创建流。或者可以通过将其视为数据从给定的字符串中创建它。我想在两种情况下重用该函数。
下面的代码在第二种情况下出现错误:“错误C2664:'do_something:无法将参数1从'std::basic_istringstream'转换为'std::basic_istream'”。
正确的方法是什么?

static void do_something(std::basic_istream<unsigned char>& in)
{
   in.get();
}

static void string_read(unsigned char* in)
{
   std::basic_ifstream<unsigned char> file(std::string("filename"));
   do_something(file);

   std::basic_istringstream<unsigned char> str(std::basic_string<unsigned char>(in));
   do_something(str);
}

最佳答案

您的代码正在经历一种令人讨厌的解析。该行:

std::basic_istringstream<unsigned char> str(std::basic_string<unsigned char>(in));
被解释为函数声明。此处的str是一个函数,该函数返回std::istringstream并将参数std::string类型的变量in用作其参数。因此,当您将其传递给函数时,会出现明显的类型不匹配。
要将其更改为变量声明,可以使用花括号:
std::basic_istringstream<unsigned char> str{std::basic_string<unsigned char>(in)};

关于c++ - C++,可以采用ifstream或istringstream的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62959857/

相关文章:

c++ - 这会导致 C++ 中的内存泄漏吗?

html - 是否可以触发由 minko 中的 html 事件启动的 C++ 代码?

c++ - 我如何在运行时确定是否有特定 C++ 异常类的 catch block ?

C++ 将字符串写入文本文件中的一行;换行问题\n 不工作

c++ - 字符串流问题

c++ - 如何阻止读取 C++ stringstream 以等待数据

c++ - unordered_map.emplace 给出编译器时间错误?

c++ - 用于打开文件的紧凑指针表示法

c++ - 在循环中使用 isstringstream 作为分词器

c++ - 关于 istringstream 和 >>operator