您可以Display
操縱display_msg
的輔助功能,它封裝輸出的類。 Display
無法返回void
,因爲如果您正在查找要使用的語法os << Display()
,則Display
將不得不返回void
以外的內容。
這裏是display_msg
定義:因爲它執行什麼重要的
class display_msg { };
類爲空。我們將重載插入運算符這個類,這樣我們就可以訪問輸出流,我們的自定義數據插入到:
std::ostream& operator<<(std::ostream& os, const display_msg&)
{
return os << "My message";
}
這是一個非常簡單的設置。但正如您所說,您希望將輸出重定向到標準輸出(std::cout
)。爲此,您必須將std::cout
的緩衝區複製到文件流中。你可以做,使用RAII(以管理對象之間的壽命依賴):
struct copy_buf
{
public:
copy_buf(std::ios& lhs, std::ios& rhs)
: str(lhs), buf(lhs.rdbuf())
{
lhs.rdbuf(rhs.rdbuf());
}
~copy_buf() { str.rdbuf(buf); }
private:
std::ios& str;
std::streambuf* buf;
};
插入器可以使用這個像這樣:
std::ostream& operator<<(std::ostream& os, const display_msg&)
{
copy_buf copy(os, std::cout);
return os << "My message";
}
Display
是返回類的簡單幫助函數:
display_msg Display()
{
return display_msg();
}
std::ifstream f("in.txt");
f << Display(); // redirects to standard output
您可以返回ostream。或者做流操作符重載(http://www.tutorialspoint.com/cplusplus/input_output_operators_overloading.htm),因爲你說你正在使用類。 – Gasim
我試過了,但得到一個錯誤,我無法返回一個私人成員(cout)。 –