Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从std::ostringstream继承_C++_Templates_Stringstream - Fatal编程技术网

C++ 从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

在我的项目中,我使用一个名为Message的类,它继承自std::ostringstream,以打印出其他类类型的人类可读信息


因此,它的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();
};