【发布时间】:2013-12-05 14:59:09
【问题描述】:
我还是 OOP 和 c++ 的新手,我正在努力学习良好的习惯。
我正在重组我继承的一个 c++ 项目。我的一大抱怨是他们如何实现命令外壳解释器/解析器。它们基本上具有现有的最大 if/elseif 列表,并且每个可能的响应函数都在单个文件中处理。它在一个文件中迅速炸毁了数千行代码。这不是很有效(命令的二进制搜索会快很多),并且导航文件以添加新的命令/响应,甚至跟踪现有响应的行为是一个巨大的困难。
我想做的是两件事:
1) 将所有这数百个函数放在一个文件中,并将它们分组到几个外部文件中,按照我决定的一些高级抽象概念进行分组。
2) 有一个大表/数组,其中包含一个字符串命令和适当的函数指针响应。我会在适当的时候对它进行排序和二进制搜索。我想在一个地方初始化这个表,所以如果我需要添加一个新命令,我可以追加到表中。一表一格,将命令映射到响应
所以我想知道您的 c++/oop 专家在实现这些文件和表格的情况下会提出什么建议。就像我说的我很新,所以我想知道所有这些新的外部文件是否应该只包含静态函数和变量(只是一个“命名空间”文件),或者我是否应该让它们成为成熟的类。类概念听起来不错,但我想知道在将这些对象的方法指针用于编译时初始化表时是否会出现某种实例化排序问题。或者在这种情况下单例类是否有意义?
【问题讨论】:
-
boost (www.boost.org) 有一些很酷的东西可以帮助您使用命令行解析器。为什么不看看?
-
另外,(假设函数具有相同的签名),
std::map<std::string, funcptr>听起来很适合#2。 -
Command Pattern 也可能会有所帮助。