gpt4 book ai didi

c++11 - std::pair 的 switch 语句?

转载 作者:行者123 更新时间:2023-12-05 00:49:52 25 4
gpt4 key购买 nike

我想切换两个整数的可能值,或者在另一种情况下切换两个 bool 值。为了讨论起见,假设我已经完成了

auto mypair = std::make_pair(foo, bar);

我怎样才能达到相当于

switch(mypair) {
case make_pair(true, false): cout << "true and false"; break;
case make_pair(false, true) cout << "false and true"; break;
case default: cout << "something else";
}

使用 C++11? (如果有帮助,C++14/17 也相关)?

最佳答案

您只能打开一个整数类型,但如果您可以设计一个函数将您的对(或任何复杂类型)映射到一个整数类型,您可以将其声明为 constexpr (C+ +11) 表示它可以在编译时解决。那么它就可以作为 case 表达式来接受了。

简单示例:

enum Action { peel, eat, juice };
enum Fruit { apple, orange, banana };

constexpr unsigned int switch_pair(Action a, Fruit f) {
return (a << 16) + f;
}

然后像这样定义开关:

switch(switch_pair(mypair.first,mypair.second))
{
case switch_pair(peel,apple): std::cout << "Peeling an apple" << std::endl; break;
case switch_pair(eat,apple): std::cout << "Eating an apple" << std::endl; break;
case switch_pair(juice,apple): std::cout << "Juicing an apple" << std::endl; break;
default:
throw std::runtime_error("We only have apples!");
}

关于c++11 - std::pair 的 switch 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35359004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com