使用启用了 C++11 的 gcc 4.8,我有一个这样的类:
class OutStream {
public:
OutStream& operator<<(const char* s);
OutStream& operator<<(int n);
OutStream& operator<<(unsigned int n);
// ...
OutStream& vformat(const char* fmt, __VALIST args);
OutStream& format(const char* fmt, ...);
};
当我通过直接调用运算符来使用这个类时,它按我的预期工作:
OutStream out;
out.operator<<(1).format(" formatted %04X ", 2).operator<<("3\n");
输出:
1 formatted 0002 3
现在,我想获得相同的输出,但使用<<
流式表示法,可能是这样的:
OutStream out;
out << 1 << format(" formatted %04X ", 2) << "3\n";
当然,这不会编译,因为没有这样的运算符来流式传输我的OutStream.format()
方法。
可能有一个解决方案,其中format()
有一个返回字符串的自由函数,但这需要首先将所有输出写入format()
缓冲区。我需要一个不std::string
使用或使用其他堆或缓冲区的解决方案——充其量是一个创建与直接调用运算符时几乎相同的代码的解决方案。
有什么建议么?
编辑,2014 年 10 月 20 日:
- 为了更好地理解我的要求:我正在使用gcc-arm-embedded gcc cross toolchain进行裸机嵌入式开发。
- 我需要将解决方案应用于一些不同的嵌入式目标系统(大多数是 Cortex-M0/M3/M4)。其中一些资源非常有限(Ram 和 Flash),我的一部分目标系统必须在不使用任何堆的情况下运行。
- 由于某些原因,我没有使用
Stl
iostream
. 但是,iostream
标签已经被 seh edit 设置了;由于主题匹配,我会保持设置,并且为我的问题找到的解决方案也可能适用于Stl
iostream
.