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);
  }
}

效果应该和这个一样(假设data是公共属性):

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 回答