是否有任何方法可以使用c ++中的switch语句将参数传递给函数?我要实现的目标是将一系列if语句变成一个switch语句。
举例来说,我想转这个:
if (function(a)) {
//code
}
if (function(b)) {
//code
}
if (function(c)) {
//code
}
进入此:
switch (function(a/b/c)) {
case a:
//code
case b:
//code
case c:
//code
}
函数根据a,b或c是否处于活动状态返回true或false。重要的是要注意,a,b和c确实是常数,但是函数本身将确定它们当前是否处于活动状态。我正在研究的问题是,在为该功能提供了要检查的按键代码时,当前是否按下了按键。看起来像这样:
if (isKeyPressed(Key::A)) {
//code
}
这有可能还是会破坏switch语句的本质?
不是使用switch
的方式。它需要看起来更像这样:
switch (someValue)
{
case value1:
function(a);
break;
case value2:
function(b);
break;
case value3:
function(c);
break;
}
如果不是您要的内容,则?:
operator 可能为您工作,具体取决于您输入的内容,例如:
?:
或者,也许您试图一次调用该函数并根据输入获得不同种类的输出,然后可以对其进行测试?如果是这样,那么function( condition1 ? a : (condition2 ? b : c) );
may是您要寻找的内容,例如:
std::variant
或:
std::variant<a,b,c> function()
{
return ...;
}
auto v = function(input);
if (std::holds_alternative<a>(v)) {
//code
}
else if (std::holds_alternative<b>(v)) {
//code
}
else if (std::holds_alternative<c>(v)) {
//code
}
或:
auto v = function(input);
switch (v.index()) {
case 0: // a
//code
break;
case 1: // b
//code
break;
case 2: // c
//code
break;
}
或:
auto v = function(input);
std::visit([](auto&& arg) {
using T = std::decay_t<decltype(arg)>;
if constexpr (std::is_same_v<T, a>) {
// code
}
else if constexpr (std::is_same_v<T, b>) {
// code
}
else if constexpr (std::is_same_v<T, c>) {
// code
}
}, v);