是否可以使用c ++中的switch语句将参数传递到函数中?

问题描述 投票:0回答:1

是否有任何方法可以使用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语句的本质?

c++ function if-statement switch-statement
1个回答
0
投票

不是使用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);
© www.soinside.com 2019 - 2024. All rights reserved.