C++ “覆盖”的问题;操作员<<&引用;课堂上源于;“奥斯特雷姆”;

C++ “覆盖”的问题;操作员<<&引用;课堂上源于;“奥斯特雷姆”;,c++,C++,我想创建一个基于“ostream”的类,该类执行一些自动格式化以生成逗号或制表符分隔的值文件。我的想法是覆盖“operator操作符操作符,类似以下的操作可能会起作用: 包括 #包括 #包括 使用名称空间std; 类MyStream:公共ostream { 公众: MyStream(ostream&out):ostream(out.rdbuf()){} 模板MyStream&operatorNB。最终你需要将MyStream放入一个标题中。在这一点上,不要使用名称空间std。而是完全限定stl中

我想创建一个基于“ostream”的类,该类执行一些自动格式化以生成逗号或制表符分隔的值文件。我的想法是覆盖“operator操作符
操作符,类似以下的操作可能会起作用:

包括
#包括
#包括
使用名称空间std;
类MyStream:公共ostream
{
公众:
MyStream(ostream&out):ostream(out.rdbuf()){}

模板MyStream&operatorNB。最终你需要将MyStream放入一个标题中。在这一点上,不要使用
名称空间std
。而是完全限定stl中的项目,例如
std::ostream
,谢谢你对我的帖子发表评论,我现在已经删除了该帖子-我从OP now获得了需求的要点。你对此有何评论quamrana的问题,你会问“为什么你不想在接受ostream的地方替换MyStream?”:我认为继承在这里没有任何好处。它只会带来一些危险。因为不同的
运营商
#include <iostream>
#include <ostream>
#include <string>

using namespace std;

class MyStream: public ostream
{
public:
  MyStream(ostream& out): ostream(out.rdbuf()) {}

  template <typename T> MyStream& operator<<(T value)
  {
    ostream::operator<<('+');
    ostream::operator<<(value);
    ostream::operator<<('+');
    return *this;
  }
};

template<> MyStream& MyStream::operator<< <string>(string value)
{
  ostream::operator<<('*');
  ostream::write(value.c_str(), value.size()); // ostream::operator<<(value);
  ostream::operator<<('*');
  return *this;
}

int main()
{
  MyStream mystr(cout);
  mystr << 10;
  cout << endl;
  mystr << "foo";
  cout << endl;
  mystr << string("test");
  cout << endl;
  return 0;
}
#include <ostream>
#include <string>

using namespace std;

class MyStream: public ostream
{
public:
    MyStream(ostream& out): ostream(out.rdbuf()) {}

    template <typename T> MyStream& operator<<(const T& value)
    {
        (ostream&)*this << '+' << value << '+';
        return *this;
    }
    MyStream& operator<< (const string& value)
    {
        (ostream&)*this << '*' << value << '*';
        return *this;
    }
    MyStream& operator<< (const char* cstr)
    {
        (ostream&)*this << '(' << cstr << ')';
        return *this;
    }
};