C++ 从std::ostringstream继承
在我的项目中,我使用一个名为Message的类,它继承自std::ostringstream,以打印出其他类类型的人类可读信息C++ 从std::ostringstream继承,c++,templates,stringstream,C++,Templates,Stringstream,在我的项目中,我使用一个名为Message的类,它继承自std::ostringstream,以打印出其他类类型的人类可读信息 因此,它的Do不是从任何流类派生来创建新流!从std::ostream或std::istream派生的唯一原因是创建正确设置的流,以使用合适的流缓冲区。您应该从std::streambuf派生来创建新的源或目标,而不是从流派生。要为新类型创建输出运算符,您需要重载运算符,以下是如何编译代码: 相关摘录: class Message : public ostringstr
因此,它的Do不是从任何流类派生来创建新流!从
std::ostream
或std::istream
派生的唯一原因是创建正确设置的流,以使用合适的流缓冲区。您应该从std::streambuf
派生来创建新的源或目标,而不是从流派生。要为新类型创建输出运算符,您需要重载运算符,以下是如何编译代码:
相关摘录:
class Message : public ostringstream
{
public:
Message() {};
virtual ~Message() {};
};
ostream& operator <<(ostream &os, const MyTypeA &a) {
return os << a.getStr();
};
ostream& operator <<(ostream &os, const MyTypeB &b) {
return os << b.getStr();
};
类消息:公共ostringstream
{
公众:
消息(){};
虚拟~Message(){};
};
ostream&operator错误的关键部分是:无法推断模板参数“t”,为什么不实现ostringstream&operator相关:
MyTypeA a,b;
Message m;
m << a << "-" << b;
Message m;
m << "Hello, world" << std::endl;
class Message : public ostringstream
{
public:
Message() {};
virtual ~Message() {};
};
ostream& operator <<(ostream &os, const MyTypeA &a) {
return os << a.getStr();
};
ostream& operator <<(ostream &os, const MyTypeB &b) {
return os << b.getStr();
};