如何区分指向重载函数的指针?

时间:2017-06-21 14:56:06

标签: c class function-pointers

我有class

struct MyClass
{
    ...
    bool (* IsValid)(MyClass * self, int type);
    bool (* IsValid)(MyClass * self, char * str);
};

相关功能

bool IsValidMyClass(BitMask * self, int mask)
{
    ...
}
bool IsValidMyClass(BitMask * self, char * str)
{
    ...
}

CTOR类似的功能

MyClass BuildMyClass()
{
    res.IsValid = IsValidMyClass; //(MyClass * self, int type);
    res.IsValid = IsValidMyClass; //(MyClass * self, char * str);
    return res;
}

在这里我感到困惑 - 如何对编译器说出正确的作业?

2 个答案:

答案 0 :(得分:2)

C中不允许重载功能。您也不能拥有同名struct的两个成员。

你需要给他们每个不同的名字。此外,C中没有引用运算符&。您可能想要传递指针。

struct MyClass
{
    ...
    bool (* IsValidByType)(MyClass *self, int type);
    bool (* IsValidByStr)(MyClass *self, char * str);
};

bool IsValidMyClassByType(BitMask *self, int mask)
{
    ...
}
bool IsValidMyClassByStr(BitMask *self, char * str)
{
    ...
}

MyClass BuildMyClass()
{
    res.IsValidByType = IsValidMyClassByType;
    res.IsValidByStr = IsValidMyClassByStr;
    return res;
}

答案 1 :(得分:0)

C ++接管了C&#39的函数指针语法。但是,如果类的虚拟成员与函数指针基本相同,那么在C ++中很少需要C样式函数指针。

如果你有一个重载函数,C ++将通过匹配函数指针参数列表中的类型来解决。