C ++ циклический через операторов - PullRequest
0 голосов
/ 24 мая 2011

У меня есть сумма, например:

x + y

Я также хочу выполнить вычитание, умножение и деление на те же две переменные:

x - y
x * y
x / y 

Каков оптимальный способцикл по всем четырем операторам по очереди?

Я знаю, что это легко сделать в функциональных языках программирования, но в C ++ я не уверен.

Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 24 мая 2011

Всего одна идея, помимо очевидного «написания»:

int add(int l, int r){
  return l + r;
}

int sub(int l, int r){
  return l - r;
}

int mul(int l, int r){
  return l * r;
}

int div(int l, int r){
  return l / r;
}

int main(){
  typedef int (*op)(int,int);
  op ops[4] = {add, sub, mul, div};

  int a = 10, b = 5;
  for(int i=0; i < 4; ++i){
    ops[i](a,b);
  }
}

Пример в Ideone .

1 голос
/ 24 мая 2011

Если операторы определены пользователем, они могут быть переданы, когда ожидается указатель на функции (члены).Для базовых типов вам может потребоваться написать оболочки, как показано в Xeo.

Вы также можете принять функцию std :: binary_function и использовать std :: plus и т. Д.C ++ 0X с std :: function и lambda.

Но очевидно, что знание более точного, чего вы хотите достичь, поможет.

0 голосов
/ 24 мая 2011

Вероятно, это выглядит так (похоже на функциональные языки программирования):

template<typename T>
std::vector<T> do_ops( const T& a, const T& b )
{
  std::vector<T> result;
  result.push_back( a + b );
  result.push_back( a - b );
  result.push_back( a * b );
  result.push_back( a / b );
  return result;
}

int main()
{
  std::vector<int> res = do_ops( 10, 5 );  
}
...