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