0

我不知道该怎么说,所以我会尝试把它放在代码中。(这有很多错误我知道它不会编译它只是为了显示我想要做的事情,因为我无法用语言表达)

    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重载<<运算符,但我不确定如何调用它以将其写入文件。欢迎任何建议!谢谢。

4

3 回答 3

2

我认为你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;
}
于 2013-10-03T06:19:49.950 回答
1

您的代码有很多问题。

如此之多,很明显您从未阅读过任何 C++ 书籍,而只是在尝试编译器。

不要那样做。由于许多独立的原因,C++ 确实是世界上最糟糕的语言。

不管你有多聪明。

实际上,聪明在某些领域是一个问题,因为许多 C++ 规则不是连贯逻辑设计的结果,而是历史演变和委员会决定的结果。即使是哈里·谢顿也无法正确预见委员会会做出什么决定,你无法推断历史。

只需选择一本好书并从头到尾阅读即可。没有其他明智的方式来学习 C++。

关于将结构写入文件,该主题通常称为“序列化”,并解决了将活动对象转换为死字节序列(写入文件或通过网络发送)和逆问题“反序列化”的稍微更普遍的问题" 将字节序列转换回活动对象(在同一系统上,在另一个相同系统上,甚至在不同系统上)。

这个问题有很多方面,例如,如果您关心系统之间的可移植性、速度、字节序列的大小、重新加载字节序列的能力,这些字节序列在您的类略有不同时保存回来,因为您改进了程序(版本控制) .

您可以做的最简单的事情就是fwrite对文件进行操作,但这在 C++ 中通常是无稽之谈,即使在技术上可行的情况下,由于许多原因,这也是一种糟糕的方式。例如,您不能直接fwrite一个std::vector对象并希望将其读回。

于 2013-10-03T06:18:18.940 回答
0

我认为你需要这样的东西:

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;
}
于 2013-10-03T06:15:06.503 回答