我怎樣才能捕捉COUT的輸入?捕獲和格式化COUT
例子:
如果我輸入:
std::cout<<"Some normal text here" << fout <<"Test %, %", 1, 2<< "works 100% fine."<<std::endl
那麼它會打印: 「這裏有些普通的文本測試1,2工程100%的罰款」
因爲運算符爲< <,所以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 <<.
}
我知道這似乎很愚蠢,但我真的很想知道它是如何完成的。我看到升壓的確做格式(「%20」)%SomeVar
類似的東西,但我想弄清楚如何與插入操作,並使用逗號運算符做到這一點。任何想法或類似的東西?
注意,你必須做'<<(FOUT <<「測試%」,1)<<'這個工作就像你想讓它。逗號運算符的優先級較低。 – chris
沒關係。我不介意這樣做,但如何?我是否正確捕獲了ostream?我似乎無法獲取數據。這將如何與逗號運算符一起工作?結合逗號和插入是我無法弄清楚的。 – Brandon
我認爲讓'fout'返回一個可以隱式轉換爲字符串的類型是可行的。您可以使用該類型的自定義'運算符''重載,以便每次獲取前一個字符串並填充它,然後依賴隱式轉換爲字符串或重載'operator <<'。 – chris