在C ++中定义参数化函数

时间:2019-02-18 14:31:43

标签: c++ function parallel-processing

我正在与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;
            }
    ....
}

1 个答案:

答案 0 :(得分:1)

我不知道EX1到EX4之间会有什么区别,但是在许多情况下,您可以使用function templateif 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();
}