gpt4 book ai didi

c++ - 捕获并格式化 cout

转载 作者:行者123 更新时间:2023-11-30 04:19:38 25 4
gpt4 key购买 nike

如何捕获 cout 的输入?

例子:

如果我输入:

std::cout<<"Some normal text here" << fout <<"Test %, %", 1, 2<< "works 100% fine."<<std::endl

然后它会打印:

"Some normal text here Test 1, 2 works 100% fine."

由于 << 运算符,100% 未格式化。只有 fout 之后的内容才会被格式化,直到遇到 << 运算符。

我可以这样做吗?

#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>


std::ostream& fout (std::ostream& I)
{
//Some how format my text here.. Then return it as the ostream.
return I;
}

int main(int argc, char* argv[])
{
std::cout<< fout << "Test %", 1 << "Other stuff 20%.";
//So Anything after fout<< should be stolen and formatted then given back to cout.. Other stuff 20% isn't formatted because of the <<.
}

我知道这看起来很傻,但我真的很想知道它是如何完成的。我看到 boost 通过执行 Format("%20") % SomeVar

做了类似的事情

但我想弄清楚如何使用插入运算符和逗号运算符来实现。有什么想法或类似的东西吗?

最佳答案

您需要为 << 定义一个新类型和 ,运营商独特的工作。

像这样。

struct fout
{
// To establish the formatting string (returns *this)
fout& operator << ( const std::string &format_string );

// To insert data into the formatted string (returns *this)
template < typename T >
fout& operator , ( const T &data );

// To produce a type that can be sent to std::cout, etc.
operator std::string ();
};

这将允许这样的代码:

cout << "Normal text " << (fout() << "Test %, %", 1, 2 ) << "works";
// ^^ A fout object is being constructed here.

如果您不喜欢这些括号,请重命名该结构并创建一个名为 fout 的实例.

关于c++ - 捕获并格式化 cout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15737232/

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