0

我的程序中有一个函数来计算给定目录中的文件数。该函数将输入参数作为目录的名称和文件名的扩展名(必须在目录中计算的文件类型)。

我想让它通用,以便函数的调用者可以指定任意数量的文件扩展名,这些文件扩展名可以作为输入参数,然后计算具有这些扩展名的特定文件。

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;
}

如何更改此函数以使其接受任意数量的参数,然后在函数内部使用相同的参数来计算文件数?

4

2 回答 2

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.
    }

}
于 2012-12-17T08:25:52.223 回答
0

在您的代码中,您有基于类型的决策:

if(fileType == fileExtension1 || fileType==fileExtension2....){
//increase count
}

return fileNames;
}

如果您将有很多文件类型和函数在它们上进行操作,那么每次您需要一些特定于文件类型的操作时,您最终都会得到大量基于类型的决策逻辑(如果您是这种类型,那么就这样做,否则如果您是.. .)。

由于该函数基于“fileType”(扩展名)对“fileName”执行某些操作,因此您可以考虑将两者封装到类 File 中,因为每个文件都有名称和扩展名。然后,您的函数将对一组 File 对象进行操作。如果文件对象集是您在很多地方都在处理的东西,您可以定义一个类,例如 FileSet,然后可以使用向量、列表或任何存储文件的容器来实现该类。这样,您最终将得到一个带有单个参数的函数,例如const FileSet&,其余代码将由 File 类处理。无论如何,这不是一个明确的答案,我只建议考虑你的代码的 OOdesign。

于 2012-12-17T08:43:02.833 回答