2014-02-23 64 views
1

有沒有辦法讓sprintf直接把結果寫到給定的ostream?C++:sprintf直接到ostream

我需要這個,因爲我有代碼,不會每秒數千次電話到sprintf在緩衝器複製到一個ostream:

while(..) 
{ 
    .. 
    char buf[64]; 
    sprintf(buf, ..) 
    oss << buf; 
} 
+2

沒有,ISN 「T。當然,你的剖析器已經發現這對你的應用來說是一個嚴重的瓶頸,不是嗎?更別提你應該首先使用'snprintf' ... –

+0

絕對沒有辦法?甚至沒有任何back_inserter/ostream_iterator聰明的技巧? – GabiMe

+0

@GabiMe任何'std :: back_inserter'實現我可以想象,需要做的幾乎與您在示例中顯示的一樣。所以從這些方面獲得更好表現的機會是有爭議的。 –

回答

2

我不知道任何方式做到這一點,但你當然不需要它。

ostream是專門設計,以避免類printf格式化,所以我相信任何的printf/sprintf的格式輸出可以重新設計直接在ostream進行操作。只需使用<< overloaded operato即可進行格式設置。

+0

當然,(你的意思是<<操作符,不是......),但無論如何,我想知道是否有一種方法使用sprintf – GabiMe

+0

你不喜歡臨時緩衝區出於演出的原因,或者它只是一種風格問題? –

+0

表現明智。有很多大緩衝區應對ostream每秒幾千次,如果有一種方法可以消除.. – GabiMe

2

不,C函數與stl容器沒有共同之處。

爲什麼不全部消除sprintf和直接把所有輸出字符串流:

ss << " some string " << 99 << ... 

字符串流具有毫不遜色的格式可能性,sprintf和您準備字符串,則:

ss.str()