2016-08-16 77 views
-3

我正在写一个C++类,需要引用按音节计数排序的英文或法文单词。格式化的字典文件是根据它们的语言命名的,并且在它们被读入之后,类中的英语和法语功能共享相同的逻辑。在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"; 
//... 

包含的所有文件的目录传递给构造函数,那么文件名字符串在初始化引用功能。

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

+0

构建一个*语言环境*对象,该对象链接到一个依赖于语言的字符串表。 –

+0

在给定语言和可填数字的单个函数中,不能“构造”文件名吗? –

回答

2

你可以只使用的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; 
} 

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

0

你可以恒定的指针传递给定数据:

void My_Function(char const * const p_text); 

这不会创建一个新的变量,不像使用std::string

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

相关问题