在C ++中将文件名字符串传递给函数的最佳做法是什么?

时间:2016-08-16 14:49:28

标签: c++ function parameters parameter-passing

我正在编写一个c ++类,需要引用按音节计数排序的英语或法语单词。格式化的字典文件根据其语言命名,在读入之后,类中的英语和法语函数共享相同的逻辑。

//Files needed for French
const char sSingleSyllablePath[] = "FR-SGL.txt";
const char sDoubleSyllablePath[] = "FR-DBL.txt";
const char sTripleSyllablePath[] = "FR-TRI.txt";
//...

数组需要具有相同的名称,但引用不同的文件:

//Files needed for English
const char sSingleSyllablePath[] = "EN-SGL.txt";
const char sDoubleSyllablePath[] = "EN-DBL.txt";
const char sTripleSyllablePath[] = "EN-TRI.txt";
//...

将包含所有文件的目录传递给构造函数,然后在初始化函数中引用文件名字符串。

使用正确的文件名分配调用此方法的最佳方法是什么?拥有两个具有相同代码但名称不同的单独类很容易,但效率似乎不高。由于存在许多必需的文件,因此在构造函数中包含大量参数似乎也不正确。

2 个答案:

答案 0 :(得分:1)

你可以使用std :: string:

const std::string sSingleSyllablePath = "-SGL.txt";
const std::string sDoubleSyllablePath = "-DBL.txt";
const std::string sTripleSyllablePath = "-TRI.txt";

然后你必须定义一个这样的函数:

std::string getLocalized(const std::string &loc, const std::string &filename)
{
  return loc + filename;
}

这是一个单独的功能,因为 - 如果你需要在创建本地化文件名之前做一些事情。

答案 1 :(得分:0)

您可以将常量指针传递给常量数据:

void My_Function(char const * const p_text);

与使用std::string不同,这不会创建新变量。

顺便说一下,您可能需要考虑将字符串声明为static。我发现static关键字允许编译器发出直接访问字符串的代码(而不是复制它们)。您仍然可以将指针传递给静态字符串。