我正在与C ++语言进行斗争以获得具有四个功能的微型处理器:LS(从内存加载/存储),IC(内部现金),DE(解码),EX(执行)。 编写EX函数后,请参见下文,我发现此函数必须是参数化函数(?)
EX函数如下所示:
void CPU::EX() {
while (DE_EX.size() != 0) {
switch (src1) {
case R0:
ptrLog->PrintSrc1("R0");
break;
case R1:
ptrLog->PrintSrc1("R1");
break;
case R2:
ptrLog->PrintSrc1("R2");
break;
case R3:
ptrLog->PrintSrc1("R3");
break;
case IMM:
ip = IP + 2;
ptrLog->PrintSrc1("IMM");
break;
case ADDR:
ip = IP + 2;
ptrLog->PrintSrc1("ADDR");
break;
case ADDR_R:
ip = IP + 2;
ptrLog->PrintSrc1("ADDR_R");
break;
default:
ptrLog->PrintSrc1("Not valid");
break;
}
....
}
答案 0 :(得分:1)
我不知道EX1到EX4之间会有什么区别,但是在许多情况下,您可以使用function template,if constexpr
(而不是#ifdef
)和{{3 }}。第二个是C ++ 17功能。
示例:
template<bool doA, bool doB>
int f_base() {
// common code
int x = 1;
if constexpr(doA) {
x += 2; // some function logic
}
// more common code
x += 3;
if constexpr(doB) {
x += 4; // some more conditional logic
}
return x;
}
constexpr auto f1 = f_base<false, false>;
constexpr auto f2 = f_base<false, true>;
constexpr auto f3 = f_base<true, false>;
constexpr auto f4 = f_base<true, true>;
int main() {
return f3();
}