将递增/递减运算符传递给函数

kir*_*gum 5 c++ function argument-passing pre-increment

我有相同的功能,唯一的区别是它会递增或递减.我想从中概括一下.

template<typename O>
void f(int& i, O op){
  op(i);
}

int main() {
  int i;
  f(i,operator++);
  f(i,operator--);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

我的另一个选择是使用函数std :: plus或有两个函数,但如果可能的话我更喜欢这个解决方案.谢谢.

inf*_*inf 6

只需使用lambda:

template<typename O>
void f(int& i, O op){
  op(i);
}

int main() {
  int i;
  f(i,[] (int& x) { ++x; });
  f(i,[] (int& x) { --x; });
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

还不清楚你是想要后期还是预先增量.

如@TC所述,如果要保留普通运算符的语义,可以添加return语句.