假设我有一些用于文件和流的内部框架。我有IOutputStream
接口类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)
. 对于这种用法,我必须调用 anstrlen(s)
来确定大小,然后我可以调用最后一步。这是相当疯狂的,因为我知道编译时的长度appletree
。
有什么好的做法吗?STL 是如何ostream
使用titerals 的?