我正在创建一个重放系统,基本上它将用户输入存储为:
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的新手,观看了一些视频到指针中,用作参数很难找到正确的方式放置“ *和&”
答案 0 :(得分:0)
您可能正在寻找的东西是这样的:
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));
}
有趣的部分在operator<<
中。在这里,您可以定义文件格式。