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

标签 c++ stl literals

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

相关文章:

c++ - 在程序选项值(ini 文件)中使用井号

c++ - 如何根据另一个 vector 对一个 vector 进行排序?

c++ - 在 C++ 中添加字符串和文字的问题

c++ - GCC 模板问题

c++ - fread字节数限制

java - 从文件夹中排除 cpp 而不删除

c++ - 如何使用运算符来否定谓词函数!在 C++ 中?

c++ - 使用 STL 会显着增加占用空间吗?

c++ - 字符串文字之间的比较

c++ - 文字运算符模板在 GCC 4.8 中不起作用