具有可变数量参数的函数

时间:2012-12-17 08:23:34

标签: c++

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

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

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

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

2 个答案:

答案 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。