簡體   English   中英

在C ++中流式傳輸字符串文字

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM