1

std::cout に似たクラスを作成したいと思います。>> および << 演算子をオーバーロードする方法は知っていますが、 << 演算子をオーバーロードして、 std::cout のようにinputになるようにしたいと思います。

次のようになります。

class MyClass
{
   std::string mybuff;
 public:
   //friend std::???? operator<<(????????, MyClass& myclass)
   {
   }
}
.
.
.

  MyClass class;
    class << "this should be stored in my class" << "concatenated with this" << 2 << "(too)";

ありがとう

4

2 に答える 2

4
class MyClass
{
    std::string mybuff;
 public:
    //replace Whatever with what you need
    MyClass& operator << (const Whatever& whatever)
    {
       //logic
       return *this;
    }

    //example:
    MyClass& operator << (const char* whatever)
    {
       //logic
       return *this;
    }
    MyClass& operator << (int whatever)
    {
       //logic
       return *this;
    }
};
于 2012-07-17T06:13:09.093 に答える
0

最も一般的な答えは次のようになると思います。

class MyClass
{
   std::string mybuff;
 public:
   template<class Any>
   MyClass& operator<<(const Any& s)
   {
          std::stringstream strm;
          strm << s;
          mybuff += strm.str();
   }

   MyClass& operator<<( std::ostream&(*f)(std::ostream&) )
   {
    if( f == std::endl )
    {
        mybuff +='\n';
    }
    return *this;
}
}

std::endl は Timbo の回答hereから貼り付けられました

答えてくれてありがとう!

于 2012-07-17T06:40:52.247 に答える