与可维护性相关的是映射表比大型switch语句更好的设计吗?

Ste*_*hen 4 c++ translation

我正在将文本文件从一组定义转换为另一组定义,我通过编写一个小解析器来解决问题.一旦我确定了一个符号,我最终会在一个case语句中决定调用哪个转换例程,具体取决于用户选择的输入选项是什么(这些代码表示不同机器上的不同内容).

我基本上采用多种输入格式并将它们转换为单个输出格式,超过大约400个唯一符号.

问题在于,随着这个项目从几个简单的翻译,每个都在自己的头文件中,变成十几个或更多输入格式,维护起来变得很麻烦.每个头文件都包含一个生成相关输出的monster switch语句.这一切都有效,但看起来真的很笨拙.

我是否可以通过为每个输入机器创建映射表(即包含输入和输出符号的2d数组)并使用将表作为输入的公共转换例程来解决可维护性问题?我应该考虑更好的设计吗?

Set*_*gie 5

散列表类型结构肯定更容易维护,但至少有一个权衡,即你的巨型switch语句几乎肯定会更快,因为任何体面的编译器都会将它优化为跳转表.但它(取决于实现)它不应该是非常慢,除非你做500亿次查找或其他东西.也就是说,哈希表可以优化为与switch语句一样快.

一句话:如果你不需要确定你可以获得每一盎司的速度,那么我会使用哈希表.如果重要,请说明.

您可能想要查看生成编译时完美哈希表的gperf.