我有一个 C++ 类 MyObject
我希望能够像向 osstream 一样提供这些数据(但与直接 sstream 不同,输入数据以特殊方式格式化)。我似乎无法弄清楚如何为 MyObject 重载运算符以吃掉给它的输入。
class MyObject {
public:
ostringstream s;
FEEDME
};
int main() {
MyObject obj;
obj.FEEDME << "Hello" << 12345;
// I want obj.s == ":Hello::12345:"
}
我想要它,所以每个输入的项目都被 : : 包围
因此在给定的示例中,s = ":Hello::12345"应该是最终结果。我的问题是,我怎样才能告诉对象什么时候有 <<something
, 把 : : 放在某物周围。
这可能吗?
最佳答案
试试这个:
class MyObject {
public:
template <class T>
MyObject &operator<<(const T &x) {
s << ':' << x << ':';
return *this;
}
std::string to_string() const { return s.str(); }
private:
std::ostringstream s;
};
MyObject obj;
obj << "Hello" << 12345;
std::cout << obj.to_string() << std::endl;
有些东西你无法插入流中,但它应该适用于所有基础知识。
关于c++ - 让 C++ 类充当自定义 ostream、sstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/823003/