Условное присваивание для константных ссылочных объектов в C++
Вот фрагмент кода, который иллюстрирует мою проблему:
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 ответа
Решение
Вы можете использовать троичный оператор: https://en.wikipedia.org/wiki/%3F%3A
const A &reward = (score > 5) ? foo1() : foo2();
Вы можете использовать условного оператора в ваших интересах. Тем не менее, вы не можете использовать A& reward = ...
так как оба foo1()
а также foo2()
вернуть const A&
, Вам придется использовать const A& reward = ...
,
const A& reward = ( (score > 5) ? foo1() : foo2() );
В качестве альтернативы вы можете создать дополнительную перегрузку:
void foo3(const A& reward)
{
// ...
}
void foo3(int score) {
if (score > 5)
foo3(foo1());
else
foo3(foo2());
}