我的程序中有一个函数来计算给定目录中的文件数。该函数将输入参数作为目录名称和文件名的扩展名(必须在目录中计算的文件类型)。
我想让它变得通用,以便函数的调用者可以指定任意数量的文件扩展名,可以将其作为输入参数,然后计算具有这些扩展名的特定文件。
void getNames(string dirName, string fileExtension1, string fileExtension2, string fileExtension3){
vector<string> fileNames = //do some operations
if(fileType == fileExtension1 || fileType==fileExtension2....){
//increase count
}
return fileNames;
}
如何更改此功能以便它接受任意数量的参数,然后在函数内使用相同的参数来计算文件数?
答案 0 :(得分:7)
最好的方法是传递扩展矢量
void getNames(string dirName, const vector<string>& fileExtensions)
现在,您的if
将位于for
循环
for(int i = 0; i<fileExtensions.size();i++){
if(fileType == fileExtension[i]){
//increase count
break;// this might be needed to ensure no multiple positives? depending on what you want to do.
}
}
答案 1 :(得分:0)
在您的代码中,您有基于类型的决定:
if(fileType == fileExtension1 || fileType==fileExtension2....){
//increase count
}
return fileNames;
}
如果你有很多文件类型和函数在运行它们,每次你需要一些特定于文件类型的操作时,你将得到基于类型的广泛决策逻辑(如果你是这种类型,那么,如果你是 ...)。
由于函数正在基于“fileType”(扩展名)对“fileName”执行某些操作,因此您可以考虑将两者封装到类File中,因为每个文件都有一个名称和扩展名。然后,您的函数将在一组File对象上运行。如果文件对象集是您在许多地方工作的东西,您可以定义一个类,例如然后可以使用向量,列表或任何容器来实现FileSet以存储文件。通过这种方式,您将获得一个采用单个参数的函数,例如: const FileSet&
,其余代码将由File类处理。无论如何,这不是一个明确的答案,我只建议考虑你的代码的OOdesign。