gpt4 book ai didi

c++ - 可以创建一个临时流对象作为函数的参数吗?

转载 作者:行者123 更新时间:2023-11-28 03:04:54 26 4
gpt4 key购买 nike

我有这个函数,它应该采用可选的流参数作为错误文本打印。

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);

但是我得到一个编译错误。

  1. 我如何创建这个临时对象并用一行流式传输参数(或者我是否必须先创建它,这样用一行就不可能了)?
  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 ,但您当然不希望这种丑陋的技巧)。因此,除非这是一个实现错误(不太可能!),否则您必须像上面建议的那样对代码进行大的更改。

关于c++ - 可以创建一个临时流对象作为函数的参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19996023/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com