c++玫举:请问如何让<多个玫举类型>成为函数的<输入参数>

发布于 2022-09-13 00:03:54 字数 1666 浏览 23 评论 0

假如有如下一个类,

class Color
{
public:
    enum family
    {
        family_red = 0,
        family_yellow = 1,
        family_green = 2,
        ...
    }
    enum red
    {
        red_0 = 0,
        red_1 = 1,
        red_2 = 2,
        ...
    }
    enum yellow
    {
        yellow_0 = 0,
        yellow_1 = 1,
        yellow_2 = 2,
        ...
    }
    enum green
    {
        green_0 = 0,
         green_1 = 1,
         green_2 = 2,
         ...
    }
    struct data
    {
        UINT8 family;
        UINT16 id;
        const char * name;
        const char * hex;
        UINT8    rgb[3];
        data(...)
        {
            (初始化省略)
            ...
        }
    }
public:
    vector<data>List;
    Color()
    {
       //填数据
       List.push_back(data(...))
    }
public
    //根据family,id返回data结构
    data Get(uint8   _family,unit8   _id)
    {
         for (int i = 0; i < List.size(); i++) 
         {
            data da = List[i];
            if (da.family = _family && da.id == _id)
            {
                return da;
            }
         }
    }
    //根据玫举类型返回数据
    data Get(family  _family,red     _id)
    {
        return Get((uint8)  _family,(uint8)_id);
    }
    data Get(family  _family,yellow    _id)
    {
        return Get((uint8)_family,(uint8)_id);
    }
    data Get(family  _family,green    _id)
    {
        return Get((uint8)  _family,(uint8)_id);
    }
    ...
}

Get函数重载,第二个参数的输入类型分别限定为red,yellow,green...
,如果我写成

data Get(family   _family,enum   _red_yellow_green)
{
    return Get((uint8)_family,(uint8) _red_yellow_green);<-报错:不允许使用类型名
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤独难免 2022-09-20 00:03:54

你的

data Get(family   _family,enum   _red_yellow_green)

想表达什么含义,第二个参数只能使用 red、yellow、green 吗?C/C++不存在这样的用法啊?是你自己想象的吗?你这么写是要定义一个enum,结果放在了参数定义部分,当然会报错了。

你不是已经有了

    //根据玫举类型返回数据
    data Get(family  _family,red     _id)
    {
        return Get((uint8)  _family,(uint8)_id);
    }
    data Get(family  _family,yellow    _id)
    {
        return Get((uint8)_family,(uint8)_id);
    }
    data Get(family  _family,green    _id)
    {
        return Get((uint8)  _family,(uint8)_id);
    }

这已经限制了只能使用 red, yellow, green 作为第二个参数了,如果你不想让用户直接使用

data Get(uint8   _family,unit8   _id)

你直接把这个函数放到 private: 下面就可以了啊,不知道你的目的是什么?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文