假设我有一些用于文件和流的内部框架。我有IOutputStream
接口(interface)类 write(char const *buffer, size_t size)
和 flush()
.我有一个工具,叫做 Printer
可以与 IOutputStream
的任何实例一起使用后人。然后我有 Printer & operator<<(T x)
样式方法,其中 T x
是要写入的数据(或指向它的引用或指针)。
例如Printer & operator<<(int x)
会翻译x
到字符串,并将调用引用的输出流的 write(...)
真正的功能。
让我们看看问题所在!调用: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);
}
关于c++ - 在 C++ 中流式传输字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12317995/