将类的向量写入文件的方法
Ways to write a vector of a class to a file
我不确定我应该如何措辞,所以我会尝试把它放在代码中。(这有很多错误我知道它不会编译它只是为了显示我想做什么,因为我无法用语言表达(
using namespace std; //for correctness sake
class foo {
public:
foo(int a=0, int n=0);
void stuff(int a);
void function(int n);
const int get_function() {return n;}
const int get_stuff(){return a;}
private:
int n, a;
};
struct Store{
public: get_foo(){return vector<f.foo>;} //I'm not too sure of the syntax here but you get the idea
private:
foo f;
}
基本上,我想获取类 foo 中返回的所有信息,并将其格式化后输出到一个文件中。问题是,我需要在文件中制作许多这些内容,并且它必须能够读回它才能有任何价值。因此,仅将每个连续的foo类附加到文件中是行不通的(至少我看不出如何(。
我尝试使用 ostream
重载 <<
运算符,但我不确定如何调用它以将其写入文件。欢迎任何建议!谢谢。
我认为你的Store
应该是这样的:
struct Store
{
public:
std::vector<foo> get_foo()
{
return f;
}
private:
std::vector<foo> f;
};
要重载std::ostream
的<<
:
std::ostream& operator<<(std::ostream& out, const Store& f)
{
for (auto &x : f.get_foo())
out << x.get_function() << ", " << x.get_stuff() << "n";
return out;
}
//Without auto
std::ostream& operator<<(std::ostream& out, const Store& f)
{
std::vector<foo> q = f;
for (int i=0; i<q.size(); i++)
out << q[i].get_function() << ", " << q[i].get_stuff() << "n";
return out;
}
你的代码有很多问题。
如此之多,很明显你从未读过任何C++书,只是在尝试编译器。
别这样。由于许多独立的原因,C++确实是世界上处理这种方式的最糟糕的语言。
不管你有多聪明。
实际上,在某些领域,聪明是一个问题,因为许多C++规则不是连贯的逻辑设计的结果,而是历史演变和委员会决策的结果。即使是哈里·塞尔登也无法正确预见委员会会做出什么决定,你无法推断历史。
只要挑选一本好书,从头到尾读完。没有其他明智的方法来学习C++。
关于将结构写入文件,该主题通常称为"序列化",它处理将活动对象转换为死字节序列(写入文件或通过网络发送(的稍微更一般的问题,以及将字节序列转换回活动对象的反向问题"反序列化"(在同一系统上, 在另一个相同的系统上,甚至在不同的系统上(。
这个问题有很多方面,例如,如果您关心的是系统之间的可移植性、速度、字节序列的大小、重新加载字节序列的能力,这些序列在您的类因您发展程序而略有不同时保存回来(版本控制(。
您可以做的最简单的事情就是将内容fwrite
到文件中,但这通常只是C++中的胡说八道,并且出于多种原因,即使技术上可行,这也是一种糟糕的方式。例如,您不能直接fwrite
std::vector
对象并希望将其读回。
我认为你需要这样的东西:
template<typename T>
std::ostream& operator << (std::ostream& out, const std::vector<T*>& elements)
{
for (size_t i = 0; i < elements.size(); i++)
out << elements[i] << ", ";
return out << std::endl;
}
- 如何使用curlpp通过POST方法上传文件和json数据
- 一种在C++中读取TXT配置文件的简单方法
- 在 cpp 文件中隐藏采用模板参数引用的方法
- 在C++中包含原型文件的正确方法是什么?
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?
- 不带预处理器的调用方法/文件的文件名/行号
- 引用文件的适当方法是什么?
- 在文件中写入而不是在 c++ 中使用 "<<" 的替代方法?
- 查找定义我的 C/C++ 函数/宏的文件比'grep'更简单的方法
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- C++:std::ofstream 方法 open() 在第二次迭代时擦除打开的 ifstream 文件
- 如何使用 C/C++ 和 system() 系统调用以外的其他方法在 Linux 中获取文件功能?
- 创建进行生产构建并创建调试信息的C++生成文件的最佳方法?
- 是否有正确的方法对生成文件中的对象文件使用模板命令?(C++)
- 将位字符串转储到二进制文件的最佳方法是什么
- 在目录中查找所有.cpp.h文件(include,src等)的传统方法
- 是在DEX文件方法计数中计数的本机C 方法
- C++更新 txt 文件方法
- h头文件方法混乱