我有一个函数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/