假设我有一些用于文件和流的内部框架。我有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 的?