[英]Streaming string literals in C++
假設我有一些文件和流的內部框架。 我有IOutputStream
接口類,帶有write(char const *buffer, size_t size)
和flush()
。 我有一個名為Printer
的工具,可以與IOutputStream
后代的任何實例一起使用。 然后我有Printer & operator<<(T x)
樣式方法,其中T x
是要寫入的數據(或引用或指向它的指針)。
例如, Printer & operator<<(int x)
將x
轉換為string,並將為引用的輸出流的write(...)
函數調用real。
讓我們看看問題! 調用: printer << "appletree";
。 它調用Printer & operator<<(char const *s)
。 對於這種用法,我必須調用strlen(s)
來確定大小,然后我可以調用最后一步。 這是相當瘋狂的,因為我知道編譯時appletree
的長度。
這有什么好的做法嗎? STL的ostream
如何與titerals一起玩?
由於字符串文字的類型為const char(&)[]
,因此可以為它們添加重載:
template<size_t n>
Printer& operator<<(const char (&cstring)[n]) {
write(cstring, n - 1);
}
怎么樣
template<std::size_t Size>
Printer& operator << (const char (&s)[Size]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.