C ++:两个函数,每个函数都采用枚举参数,签名匹配?

时间:2014-03-08 07:10:12

标签: c++ function pointers enums

在存在两个函数并且都接受枚举作为参数(不同的枚举)的情况下,单个类型的函数指针是否可以引用它们?

enum MyEnum1 {...};
enum MyEnum2 {...};

void blah( MyEnum1 one );
void guff( MyEnum2 two );

void (*pFunc[2]) ( int );

pFunc[0] = blah;
pFunc[1] = guff;

有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

不,因为枚举类型不可隐式转换,更不一样的确切类型。您可以通过使函数采用int并将其强制转换为enum并在顶部进行验证,轻松地执行您想要的操作。

答案 1 :(得分:0)

  

有更好的方法吗?

这实际上取决于你想要通过一个函数获取2种参数来实现的目标。

C ++重载函数支持具有不同参数的相同函数。



    #include "stdio.h"

    enum Enum1
    {
        E1_one,
        E1_two
    };

    enum Enum2
    {
        E2_one,
        E2_two
    };

    class Foo
    {
    public:
        void Bar(Enum1 e1)
        {
            printf("Function parameter Enum1\n");    
        }

        void Bar(Enum2 e2)
        {
            printf("Function parameter Enum2\n");
        }
    };

    int main(int argc, char** argv[])
    {
        Foo foo;
        foo.Bar(E1_one);
        foo.Bar(E2_two);

        return 0;
    }