繁体   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