C/C++中遍历枚举类型

通常在其他语言中,例如VB,JAVA等,都可以直接对枚举类型进行遍历,但是要在c/c++中直接遍历,就遇到问题了。那是不是C/C++中用不着遍历枚举类型呢?我个人觉得不是,因为既然其他语言中有遍历的方法,那肯定就有存在的理由,例如VB中可以使用一个函数轻轻松松拆分一个字符串,C/C++就不行,还得自己写,那好吧,那我们就自己写遍历枚举类型的方法。

我选取CDialogEx里的一个枚举变量来做例子:

enum BackgroundLocation
    {
        BACKGR_TILE,
        BACKGR_TOPLEFT,
        BACKGR_TOPRIGHT,
        BACKGR_BOTTOMLEFT,
        BACKGR_BOTTOMRIGHT,
    };

以上是枚举申明,以下是遍历代码:

for( CDialogEx::BackgroundLocation myEnum = CDialogEx::BACKGR_TILE ; 
    myEnum <= CDialogEx::BACKGR_BOTTOMRIGHT ;         
   (CDialogEx::BackgroundLocation)myEnum++ )
{
    SetBackgroundImage(IDB_BITMAP_BK, myEnum);
    AfxMessageBox(_T("停一下"));
}

但是直接这样是有问题的,因为枚举类型没有操作符++的实现方法,我们要自己写一个:

inline CDialogEx::BackgroundLocation operator++( CDialogEx::BackgroundLocation &rs, int ) 
{
    CDialogEx::BackgroundLocation oldEnum = rs;
    rs = (CDialogEx::BackgroundLocation)(rs + 1);
    return oldEnum;
}

这样,我们就可以对枚举类型进行遍历了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用libudev枚举相机设备的C++代码示例: ```cpp #include <libudev.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int main(void) { struct udev *udev; struct udev_enumerate *enumerate; struct udev_list_entry *devices, *dev_list_entry; struct udev_device *dev; /* 创建udev对象 */ udev = udev_new(); if (!udev) { printf("无法创建udev对象\n"); exit(1); } /* 创建一个枚举对象 */ enumerate = udev_enumerate_new(udev); if (!enumerate) { printf("无法创建udev_enumerate对象\n"); exit(1); } /* 添加要扫描的设备类型 */ udev_enumerate_add_match_subsystem(enumerate, "video4linux"); /* 扫描设备 */ udev_enumerate_scan_devices(enumerate); /* 获取设备列表 */ devices = udev_enumerate_get_list_entry(enumerate); /* 遍历设备列表 */ udev_list_entry_foreach(dev_list_entry, devices) { const char *path; /* 获取设备路径 */ path = udev_list_entry_get_name(dev_list_entry); /* 根据设备路径获取设备对象 */ dev = udev_device_new_from_syspath(udev, path); /* 获取设备属性值 */ printf("Device Node Path: %s\n", udev_device_get_devnode(dev)); printf("Vendor ID: %s\n", udev_device_get_property_value(dev, "ID_VENDOR_ID")); printf("Product ID: %s\n", udev_device_get_property_value(dev, "ID_MODEL_ID")); printf("Device Name: %s\n", udev_device_get_property_value(dev, "DEVNAME")); /* 释放设备对象 */ udev_device_unref(dev); } /* 释放枚举对象 */ udev_enumerate_unref(enumerate); /* 释放udev对象 */ udev_unref(udev); return 0; } ``` 该示例代码,使用了libudev库来枚举video4linux子系统的设备。使用udev_enumerate_add_match_subsystem函数来添加要扫描的设备类型,然后使用udev_enumerate_scan_devices函数扫描设备。获取设备列表之后,使用udev_list_entry_foreach函数遍历设备列表,获取设备属性值。最后,释放相关对象。 注意:需要在编译时链接libudev库。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值