Код: Выделить всё
auto s = make_switch(std::pair{0, []{ return 0; }},
std::pair{1, []{ return 50; }},
std::pair{2, []{ return 100; }});
assert( s(0) == 0 );
assert( s(1) == 50 );
assert( s(2) == 100 );
Код: Выделить всё
if(x == 0) return 0;
if(x == 1) return 50;
if(x == 2) return 100;
Код: Выделить всё
// pseudocode
template
auto make_switch(Pairs... ps)
{
return [=](int x)
{
( if(ps.first == x) return ps.second(), ... );
};
}
Код: Выделить всё
template
auto make_switch(Pairs... ps)
{
return [=](int x)
{
return ((ps.first == x && ps.second()), ...);
};
}
Мне нужен какой-нибудь оператор, представляющий собой комбинацию оператора-запятой и &&: он должен оценивать и оценивать правая часть оператора, если левая часть имеет значение true.
Я не могу придумать ни одного метода, который позволил бы мне реализовать это таким образом, чтобы я мог получать возвращаемое значение ps. Second() и распространять его. его вызывающей стороне лямбды, возвращаемой make_switch.
Можно ли реализовать такой вид «каскадных if» шаблон с выражением сгиба? Я бы хотел чтобы оценить только необходимое количество выражений, пока не будет найдена соответствующая ветвь.
Подробнее здесь: https://stackoverflow.com/questions/464 ... expression