我想让我自己的类在任何情况下都与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继承的信息。那么我怎么能轻松解决我的问题呢?
calculate_file_size:
size_t ifile::calculate_file_size()
{
auto present_pos = tellg();
seekg(0, ifstream::end);
auto file_size = tellg();
seekg(present_pos);
return file_size;
}
ifstream
)。 get_file_size(ifstream &ifs)
?我的ifstream obj是静态的,因此它被计算了很多次。 答案 0 :(得分:0)
从ifstream
继承添加新方法是完全没问题的,这里有一个code sample,在任何平台上都没有让我失望。但是据我所知,std
类通常没有虚拟析构函数,在处理派生对象时需要注意这些。因此,从中获取会产生犯错的新可能性。