2013-04-18 106 views
2

函數fprintf寫入FILE*。我有一個debugPrint函數寫入到stringstream。我不想改變我的功能,因爲它在很多地方使用,它會破壞代碼。使fprintf寫入std :: stringstream

如何將一個stringstream傳遞給fprintf?

更新:我是否可以將stringstream換成FILE並解開回來?

+0

在這個答案的結尾http://stackoverflow.com/a/19749019/225186我寫了關於'istringstream'的情況,我猜可以做類似的'ostringstream' – alfC

回答

0

您不能將ostream「傳遞」到fprintf。 FILE結構依賴於平臺。

這可能不是最好的辦法,但卻可以創造一個邪惡的宏:

#undef fprintf 
#define fprintf my_fprintf 

而且你可以創建兩個my_fprintfs,一種採用FILE*,另一個需要std::stringstream&作爲參數。

您可以通過直接調用my_fprintf來避免宏,但必須修改調用站點。

你不能「輕易地在文件*中包裝stringstream」,但是有一些系統特定的方法。如果這就是你之後的話,那麼Linux例如有fopencookie(),它使用函數指針來讀/寫函數。然後你可以創建包裝std :: stringstream的函數。