【发布时间】:2016-04-26 20:06:35
【问题描述】:
不确定如何命名这个问题,因为问题本身正在寻找一个我不知道其名称的构造。
问题是我正在处理控制流很大程度上依赖于数据的程序。
例如,我创建了一个 MIPS 模拟器,它实现了超过 50 条指令的列表,每条指令都独立实现,并且所有内容都由一个巨大的 switch case 控制
switch (function){ //Function is an int, each function (eg SLL) is
case 0: //associated with one
if (state->debug_level > 0){
fprintf(state->debug_out, "SLL\n");
}
step_err = SLL(state, rs, rt, rd, sa);
break;
case 2:
if (state->debug_level > 0){
fprintf(state->debug_out, "SRL\n");
}
step_err = SRL(state, rs, rt, rd, sa);
break;
case 3:
if (state->debug_level > 0){
fprintf(state->debug_out, "SRA\n");
}
//
有人告诉我,这可以使用函数指针来实现,但要做到这一点,我正在寻找一种将任何类型的数据关联起来的方法,比如字符串与其他数据,比如整数。我知道地图,但不想推回每一对。我正在寻找某种类似数组的语法,我认为如果之前看过它可能看起来类似于这样:
¿type? function_codes[]{
0, "SLL";
2, "SRL";
3, "SRA";
...
}
我不是在寻找解决这个问题的方法,而是寻找一种通用的方法来引入数据之间的快速关系并使用它来修改控制流。
回答后编辑 我实际上在寻找但我不知道确实是地图,但特别是它的初始化语法类似于数组(请参阅接受的答案)。这与函数指针一起使用完成了所需的工作。
【问题讨论】:
-
您正在寻找
std::map或std::unordered_map -
那不是
std::array<return_type (*)(A0, A1, A2, A3, A4), max_function> functions吗? -
运行时的数据控制行为听起来与语言解析非常相似。可能有点矫枉过正,但你有没有看过 BNF 解析器的方向?
-
虽然您希望在运行时访问这些数据,但似乎这一切都是在编译时定义的。听起来像是模板的工作!
标签: c++ arrays list dictionary