S.R*_*S.R 5 c++ fstream std c++11
我想让我自己的类在任何情况下都与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();
};
Run Code Online (Sandbox Code Playgroud)
我发现了许多我不应该从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;
}
Run Code Online (Sandbox Code Playgroud)
ifstream). get_file_size(ifstream &ifs)呢?我的ifstream obj是静态的,因此它的计算次数很多.ifstream继承并添加新方法是完全可以的,这是一个在任何平台上都从未让我失望的代码示例。然而,据我了解,这些std类通常没有虚拟析构函数,在处理派生对象时需要注意这一点。因此,从它们中衍生出来会创造新的犯错误的可能性。
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |