gpt4 book ai didi

c++ - 将自己的功能添加到 ifstream

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:12 25 4
gpt4 key购买 nike

我希望我自己的类在任何情况下都像 ifstream 一样工作,但我可以轻松获得文件的大小。

这是标题:

#include <fstream>

using namespace std;

class ifile: public ifstream {

size_t _file_size = 0;
size_t calculate_file_size();
public:
ifile(): ifstream(), _file_size(0) {}
ifile(const char *filename, ios_base::open_mode mode = ios_base::in):
ifstream(filename, mode)
{
_file_size = cal_file_size();
}
size_t get_file_size();
virtual ~ifile();
};

我发现了很多不应该从 ifstream 继承的信息。那么我该如何轻松解决我的问题呢?

编辑:

计算文件大小:

size_t ifile::calculate_file_size()
{
auto present_pos = tellg();
seekg(0, ifstream::end);
auto file_size = tellg();
seekg(present_pos);
return file_size;
}
  1. 很高兴看到合适的示例(如果我可以从 ifstream 继承)。
  2. 原因是一次计算,多次读取。
  3. 为什么不get_file_size(ifstream &ifs)?我的 ifstream obj 是静态的,所以它被计算了很多次。

最佳答案

ifstream继承来添加新方法是完全没问题的,这里是一个code sample在任何平台上都没有让我失望。然而,据我了解,std 类通常没有虚拟析构函数,在处理派生对象时需要注意这一点。因此,从它们中派生出新的错误可能性。

关于c++ - 将自己的功能添加到 ifstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45566625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com