gpt4 book ai didi

c++ - 大型复杂的构造函数或私有(private)方法?

转载 作者:搜寻专家 更新时间:2023-10-31 01:12:00 28 4
gpt4 key购买 nike

我正在实现一个类来表示遗留文件。这些文件是二进制文件,需要大量解析。可能会有数千行代码来解析文件。我在类中有两个构造函数:

class CrmxFile {

public:
CrmxFile(std::wstring filename);
CrmxFile(std::ifstream& file);

...
}

由于没有文件内容,对象就没有意义,所有的解析都需要在构造对象时完成。我打算实现一个庞大的构造函数(带有流参数的构造函数),但我的一位同事认为拥有非常大的构造函数不是一个好习惯。相反,我应该创建一个私有(private)方法来进行解析,并在检查流是否可读后从构造函数中调用此方法,也许,读取文件头以验证流是否包含正确的数据。

是否有任何指南/规则/约定/等。管辖这种情况?本质上(在伪代码中),这两种方法中哪一种更好,

长构造函数:

CrmxFile::CrmxFile(std::ifstream& file) {
if (file is not readable) {
throw new CmrxException(read_error);
}

CmrxHeader header(file);
if(!header.isValid()) {
throw new CmrxException(invalid_file);
}

//now do all the reading/parsing of the file
//constructor may end up being a thousand lines of code
...
}

或简短的构造函数和辅助方法:

class CrmxFile {

public:
CrmxFile(std::wstring filename);
CrmxFile(std::ifstream& file);

private:
ParseFile(std::ifstream& file);

...
}

CrmxFile::CrmxFile(std::ifstream& file) {
if (file is not readable) {
throw new CrmxException(read_error);
}

CrmxHeader header(file);
if(!header.isValid()) {
throw new CrmxException(invalid_file);
}

ParseFile(file);
}

void CrmxFile::ParseFile(std::ifstream& file) {
//do all the reading/parsing of the file here
...
}

最佳答案

helper 在这里似乎是可行的..

但是,我不会将其设为私有(private):而是将其拆分为多个尽可能小的函数,驻留在详细信息或解析器命名空间中,以便您可以测试每个方法。由于您无论如何都使用流,所以这很简单:更改您的方法以接受 istream 而不是 ifstream 然后测试的输入可以是纯字符串,然后您将其输入用作方法参数的 istringstream。相信我,您会想要对此进行测试,正如您现在所说的那样,因为它将有数百行代码,所以您不可能从一开始就把它做对。

实际的辅助方法不是简单地组合较小的方法,或者根据您拥有的小方法组合较小的方法,这些较小的方法又组合其他方法。

关于c++ - 大型复杂的构造函数或私有(private)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14157301/

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