Условное присваивание для константных ссылочных объектов в C ++ - PullRequest
0 голосов
/ 27 августа 2018

Вот фрагмент кода, который иллюстрирует мою проблему:

class A {...};
const A& foo1() {...}
const A& foo2() {...}

void foo3(int score) {
  if (score > 5)
    const A &reward = foo1();
  else 
    const A &reward = foo2();

  ...

  // The 'reward' object is undefined here as it's scope ends within the respective if and else blocks.

}

Как получить доступ к объекту reward в foo3() после блока if else? Это необходимо для избежания дублирования кода .

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

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

Вы можете использовать условный оператор в своих интересах. Тем не менее, вы не можете использовать A& reward = ..., так как foo1() и foo2() возвращают const A&. Вам придется использовать const A& reward = ....

const A& reward = ( (score > 5) ? foo1() : foo2() );
0 голосов
/ 27 августа 2018

В качестве альтернативы вы можете создать дополнительную перегрузку:

void foo3(const A& reward)
{
    // ...
}

void foo3(int score) {
    if (score > 5)
        foo3(foo1());
    else 
        foo3(foo2());
}
0 голосов
/ 27 августа 2018

Вы можете использовать троичный оператор: https://en.wikipedia.org/wiki/%3F%3A

const A &reward = (score > 5) ? foo1() : foo2();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...