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

C++, function that can take either ifstream or istringstream

我有一个函数 do_something 从流中读取无符号字符。

可以从给定文件名的文件创建流。或者它可以通过将给定的字符串视为数据来创建。我想在这两种情况下重用该功能。

下面的代码在第二种情况下给出了错误:“error C2664: 'do_something: cannot convert argument 1 from 'std::basic_istringstream' to 'std::basic_istream'”。 =21=].

执行此操作的正确方法是什么?

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 这里是一个 returns 一个 std::istringstream 的函数,它的参数是一个名为 instd::string 类型的变量。因此,当您将它传递给函数时,会出现明显的类型不匹配。

要将其更改为变量声明,您可以使用花括号:

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