0

まず、私は自分の特定の問題をあちこち探してきましたが、答えを見つけることができませんでした。だから、私がしたいのは<<、私ができるように演算子をオーバーロードすることです:

myObj = new MyObj();
unsigned int v = 2; 
myObj << v;

このクラスを使用すると、これでそれが可能になることを覚えておいてください。

class MyObj{
private:
  char *data;
  int count;

public:
  MyObj(){ data = new char[64]; count = 0; }
  //This "is" the overloaded << method
  template <typename T>
  T& operator<<(T val){
    *(T*)(data + count) = val;
    count += sizeof(T);
  }
}

効果はこれと同じである必要があります(データがパブリック属性であると仮定します):

myObj << v;

と同じである必要があります

*(unsigned int*)(myObj.data + myObj.count) = v;
myObj.count += sizeof(v);

それを行う方法について何かアイデアはありますか?I / Oまたはビット演算子をオーバーロードする方法しかありませんが、このようなものは何でもあります。

ありがとうございました!

4

1 に答える 1

1

私が正しく理解していれば、あなたは

MyObj *myObj;
......
myObj = new MyObj();
unsigned int v = 2; 
myObj << v;

そのように使用できるようにする<<には、通常、次のものがあります。

MyObj myObj;
......
unsigned int v = 2; 
myObj << v;

または、次を使用できます。

myObj = new MyObj();
unsigned int v = 2;
(*myObj) << v;

のようなコードを記述できるようmyObj << u << vにする場合は、さらに次のものが必要です。

....
    template <typename T>
    MyObj& operator<<(T val){
        *(T*)(data + count) = val;
        count += sizeof(T);
        return *this;
    }
....
于 2012-04-08T22:47:45.473 に答える