我有这个函数,它应该使用一个可选的流参数作为errortext打印。
void showUsage(std::wstringstream oErrortext, bool bExit, int nExitCode)
{
if(oErrortext.rdbuf()->in_avail() > 0)
std::wcerr << oErrortext << std::endl;
std::wcout << gUsage << std::endl;
if(bExit == true)
exit(nExitCode);
}
现在,当我尝试使用单个参数调用它时,它可以正常工作:
showUsage(std::wstringstream(L"Multiple filenames for target found"), true, 10);
但是我想使用stringstream的原因是,能够构建一个字符串,而不仅仅是静态字符串。
示例:
showUsage(std::wstringstream(L"Number format for offset missing -") << oParam->mOption, true, 10);
但是我收到了编译错误。
答案 0 :(得分:2)
您可以使用string
代替流:
void showUsage(std::wstring oErrortext, bool bExit, int nExitCode)
{
if (!oErrortext.empty())
std::wcerr << oErrortext << std::endl;
...
}
要使用它,请将字符串与+
:
showUsage(std::wstring(L"Number format missing -") + oParam->mOption, true, 10);
我的系统operator<<
stringstream
的返回类型不兼容(它返回对ostream
的引用,而不是对stringstream
的引用),因此无法追加填充到stringstream
并将其发送到单行代码中的函数(可能使用static_cast
,但你当然不希望这个丑陋的黑客攻击)。因此,除非这是一个实现错误(不太可能!),否则您必须对代码进行大量更改,如上所述。
答案 1 :(得分:0)
我建议你使用stringstream的引用:
std::wstringstream& showUsage(std::wstringstream& oErrortext, bool bExit, int nExitCode)
(请注意&amp; )
复制流似乎是一个问题。 (想想源和目的地会发生什么......)
如果您像往常一样传递它,则需要该字符串的副本。您可以通过引用来避免这种情况。