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
的函数,它的参数是一个名为 in
的 std::string
类型的变量。因此,当您将它传递给函数时,会出现明显的类型不匹配。
要将其更改为变量声明,您可以使用花括号:
std::basic_istringstream<unsigned char> str{std::basic_string<unsigned char>(in)};
我有一个函数 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
的函数,它的参数是一个名为 in
的 std::string
类型的变量。因此,当您将它传递给函数时,会出现明显的类型不匹配。
要将其更改为变量声明,您可以使用花括号:
std::basic_istringstream<unsigned char> str{std::basic_string<unsigned char>(in)};