宏实现基于C++枚举的声明、名称获取、值遍历、名称遍历

适用于利用枚举表示类型的场景(从0开始连续递增), QT代码,标准C++环境替换一下模板类型

#define ENUM(name, ...) \
    enum class name { __VA_ARGS__ }; \
    inline const QStringList& name##StrList() { QStringList list = QString(#__VA_ARGS__).split(","); static QStringList res; if (res.isEmpty()) for(QString s: list) { res.append(s.trimmed()); } return res; }; \
    inline const QString& name##Str(name t) { return name##StrList().at(static_cast<int>(t)); }; \
	inline QDebug operator<< (QDebug d, const name& o) { d << name##Str(o); return d; };

#define ENUM_LIST(name, s, e) \
    inline name& operator++(name& o) {o = static_cast<name>(static_cast<int>(o) + 1); return o; }; \
    inline name operator++(name& o, int) { auto old = o; ++o; return old; }; \
    inline QList<name>& name##List() { static QList<name> list; if (list.isEmpty()) for (name i=s; i<=e; ++i) { list.append(i); } return list; }; \

获取遍历列表

// enum class Demo { A, B, C };
ENUM(DEMO, A, B, C);
ENUM_LIST(DEMO, DEMO::A, DEMO::C);

 QList<Demo>& list = DemoList();
 QStringList& str_list = DemoStrList();

获取名称

Demo o = A;
QString& str = DemoStr(o);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值