不确定如何命名这个问题,因为问题本身正在寻找一个我不知道它的名字的结构.
问题是我正在处理控制流程主要取决于数据的程序.
例如,我创建了一个MIPS模拟器,它实现了一个包含50多个指令的列表,每个指令都是单独实现的,所有内容都由一个巨大的开关盒控制
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");
}
//
Run Code Online (Sandbox Code Playgroud)
我被告知这可以使用函数指针实现,但是这样做我正在寻找的是一种关联任何类型的数据的方式,比如说一个字符串与其他数据,比如一个整数.我知道地图,但不想推回每一对.我正在寻找某种类似数组的语法,我想如果之前看到它可能看起来像这样:
¿type? function_codes[]{
0, "SLL";
2, "SRL";
3, "SRA";
...
}
Run Code Online (Sandbox Code Playgroud)
我不是在寻找这个问题的解决方案,而是一种在数据之间引入快速关系并使用它来修改控制流的通用方法.
在答案后编辑 我实际上在寻找什么,但我不知道确实是地图,但特别是它的初始化语法类似于数组(参见接受的答案).这与函数指针一起使用完成了所需的工作.
我有一个包含代表不同十六进制单词的字符的内存区域。当我打印它们时,我想保留所有字符,但我当前的代码中非零数字的零填充被剥离。例如,如果我在内存中0000输出字符,0000但如果我有0001它输出1. 我目前正在使用 stringstream,但也尝试使用字符数组来构造字符串(请参阅评论):
stringstream ss;
char* data_ptr = sets[set_index]->get_block(block_index)->get_word(word_index);
for (int d = 0; d < 2 * bytes_word; d++){
ss << *(data_ptr + d);
}
data = ss.str();
//char* data_ch = new char[2 * bytes_word];
//char* data_ptr = sets[set_index]->get_block(block_index)->get_word(word_index);
//for (int d = 0; d < 2 * bytes_word; d++){
// data_ch[d] = *(data_ptr + d);
//}
//string data(data_ch);
//delete[] data_ch;
Run Code Online (Sandbox Code Playgroud)
由此我倾向于认为,当我将字符串传递给 stdout 时,实际上可能会进行剥离,我使用cout << data;,因为我的调试模式在两种情况下都显示字符串的内容包含所有 0。如果是这样,我该如何解决?
编辑 - …