【问题标题】:What is the best practice for passing filename strings to a funciton in C++?将文件名字符串传递给 C++ 中的函数的最佳实践是什么?
【发布时间】:2016-08-16 14:49:28
【问题描述】:

我正在编写一个需要引用按音节计数排序的英语或法语单词的 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";
//...

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

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

【问题讨论】:

  • 构建一个 locale 对象,该对象链接到与语言相关的字符串表。
  • 在给定语言和sillable编号的情况下,您不能在单个函数中“构造”文件名吗?

标签: c++ function parameters parameter-passing


【解决方案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;
}

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

【讨论】:

    【解决方案2】:

    你可以传递一个指向常量数据的常量指针:

    void My_Function(char const * const p_text);
    

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

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

    【讨论】:

      猜你喜欢
      • 2021-05-01
      • 2021-08-27
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多