假设我有一些文件和流的内部框架.我有IOutputStream带接口类write(char const *buffer, size_t size)和flush().我有一个工具,称为Printer可以与任何IOutputStream后代实例一起使用.然后我有Printer & operator<<(T x)样式方法,其中T x是要写入的数据(或引用或指向它的指针).
例如,Printer & operator<<(int x)将转换x为字符串,并将引用的输出流的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);
}
Run Code Online (Sandbox Code Playgroud)