在C++中流式传输字符串文字

Not*_*ist 3 c++ stl literals

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

mfo*_*ini 6

由于字符串文字具有类型const char(&)[],您可以为它们添加重载:

template<size_t n>
Printer& operator<<(const char (&cstring)[n]) {
    write(cstring, n - 1);
}
Run Code Online (Sandbox Code Playgroud)