如何确定函数的返回值,在编译时选择可能的选项

时间:2019-03-07 10:03:54

标签: c++ c++11

我有两个几乎相同的函数,它们接收相同的结构作为参数。 我的函数非常简化,如下所示:

struct Container {
 int A;
 int B;
}

int return_A_dependent(Container c){
  //... identical code for A and B ...
  int common_for_A_and_B = 0;
  return common_for_A_and_B + c.A;
}

int return_B_dependent(Container c){
  // ... identical code for A and B ...
  int common_for_A_and_B = 0;
  return common_for_A_and_B + c.B;
}

两个函数之间的唯一区别是它们的返回值取决于结构的不同变量。 我想在不进行运行时检查的情况下合并这两个功能。就像传递标志参数并添加if语句来转发返回值,如下所示:

int return_A_or_B(Container c, bool flag_A) {
 // ... identical code for A and B ...
  int common_for_A_and_B = 0;
  if (flag_A) {
    return common_for_A_and_B + c.A;
  }
  else {
    return common_for_A_and_B + c.B;
  }

在不使用“ if”的情况下如何处理?预先感谢。

1 个答案:

答案 0 :(得分:2)

使用指向成员的指针作为参数的模板(或带有附加参数的普通函数):

template<int Container::* p_member> int
Work(Container c)
{
    int common_for_A_and_B = 0;
    return common_for_A_and_B + c.*p_member;
}

Work<&Container::A>(c);