如何捕获cout的输入?
示例:
如果我输入:
std::cout<<"Some normal text here" << fout <<"Test %, %", 1, 2<< "works 100% fine."<<std::endl
然后它会打印出来:
“这里的一些正常文本测试1,2,100%正常工作。”
100%未格式化,因为&lt;&lt;运营商。只有fout之后的东西才会被格式化,直到它遇到&lt;&lt;操作
我能这样做吗?
#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 <<.
}
我知道这看起来很傻但我真的想知道它是如何完成的。我看到通过执行Format(“%20”)%SomeVar
来提升类似功能但我想弄清楚如何使用插入运算符和使用逗号运算符。任何想法或类似的东西?
答案 0 :(得分:2)
您需要为<<
和,
运营商定义一种新类型,以便进行独特的工作。
像这样。
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
的实例。