MyClass(A) << "hi " << 17 << std::endl;
我试图达到在累积流上编译和执行方法的程度MyClass::finish()
。到目前为止,我仍然停留在“编译”部分。以下是我目前所拥有的
#include <iostream>
#include <sstream>
#include <string>
enum foo
{
A,
B,
C
};
class MyClass
{
public:
MyClass(foo v) : v_(v), oss_()
{
}
MyClass& operator<<(std::ostream &o)
{
oss_ << o;
return *this;
}
private:
foo v_;
std::ostringstream oss_;
};
int main()
{
MyClass(A) << "hi " << 17 << std::endl;
return 0;
}
我是不是走错路了?
您的
operator<<
实现是错误的。它不应该接受另一个ostream
作为输入。相反,它需要接受您想要流入您的类并转发到您的内部的所有类型ostringstream
。您可以使用模板来简化这一点,例如:第一个重载处理数据类型,第二个重载处理诸如的流操作符
std::endl
,它们以函数形式实现。然后,您就可以调用析构函数
finish()
内部了~MyClass
。现场演示