首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++20范围从枚举

C++20范围从枚举
EN

Stack Overflow用户
提问于 2022-09-11 11:52:58
回答 1查看 88关注 0票数 1

枚举可以用作(或转换为) C++20范围吗?

我正在考虑以下用例,cartesian_product()是C++23的不幸之处:

代码语言:javascript
复制
#include <algorithm>
using namespace std::ranges;

enum Fruit{APPLE, STRAWBERRY, COCONUT};
enum Vegetable{CARROT,POTATOE};
    
for (auto [fruit, vegetable] : views::cartesian_product(Fruit, Vegetable))
{
...
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-12 15:22:26

您可以这样做,只是需要一个库的帮助才能将枚举转换为一系列枚举数名称。其中一个类库是Boost.Describe

代码语言:javascript
复制
#include <array>
#include <boost/describe.hpp>
#include <fmt/ranges.h>

enum Fruit{APPLE, STRAWBERRY, COCONUT};
enum Vegetable{CARROT,POTATO};

BOOST_DESCRIBE_ENUM(Fruit, APPLE, STRAWBERRY, COCONUT);
BOOST_DESCRIBE_ENUM(Vegetable, CARROT, POTATO);

template<class E>
constexpr auto enum_names() {
    return []<template <class...> class L, class... T>(L<T...>)
        -> std::array<char const*, sizeof...(T)>
    {
        return {T::name...};
    }(boost::describe::describe_enumerators<E>());
}

int main() {
    // prints fruits=["APPLE", "STRAWBERRY", "COCONUT"] vegetables=["CARROT", "POTATO"]
    fmt::print("fruits={} vegetables={}\n", enum_names<Fruit>(), enum_names<Vegetable>());
}

演示

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73679033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档