提问者:小点点

C++结构,引用和实例化的正确方法?


我正在创建一个重播系统,它将用户输入存储为:

std::list<ReplayBuffer>

这是一个:

struct ReplayBuffer
{
    std::bitset<10> flags;
    float frameTime;
    uint64_t frameID;

};

现在,我又创建了两个结构,ReplayFile(文件信息)和ReplayFileWriter(当然,将文件信息写入文件)

struct ReplayFile
{
    ReplayFile(std::list<ReplayBuffer>* _buffers) {
        time_t t = time(0);
        date = ctime(&t);
        _version = 1;
        buffers = *_buffers;
    }
    uint16_t _version;
    char* date;
    std::list<ReplayBuffer> buffers;
};

struct ReplayFileWriter
{
   std::ofstream file;
   
   ReplayFileWriter(ReplayFile *data) {
       file.open("replay.cdr", std::ofstream::out);
       file << data;
       file.close();

   }


};

我要做的是,键入以下内容:

ReplayFileWriter(new ReplayFile(&buffers));

所以我把缓冲区(列表)的地址传递给ReplayFile,把ReplayFileWriter的地址传递给ReplayFile的一个实例),我应该怎么做(我是cpp新手,看了一些视频变成指针,但是当作为参数使用时很难找到正确的方法来放置“*和&;”


共1个答案

匿名用户

你要找的可能是这样的东西:

struct ReplayBuffer { /* as in your code */ };

struct ReplayFile {
    explicit ReplayFile(const std::list<ReplayBuffer>& _buffers)
        : _version(1), buffers(_buffers) {
      time_t t = time(nullptr);
      date = ctime(&t);
    }
    uint16_t _version;
    std::string date;
    std::list<ReplayBuffer> buffers;
};

ostream& operator<<(ostream& os, const ReplayFile& data) {
  /* Write contents of `data` to `os` here.
     Implementation left as an exercise for the reader. */
  return os;
}

void WriteReplayFile(const ReplayFile& data) {
   file.open("replay.cdr", std::ofstream::out);
   file << data;
   file.close();
}

int main() {
  std::list<ReplayBuffer> buffers = ...;  // initialized somehow.
  WriteReplayFile(ReplayFile(buffers));
}

有趣的部分在运算符<<<中。 这就是定义文件格式的地方。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|结构|引用|实例|化|方法)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?