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

How to distinguish between pointers to overloaded functions?

我有一个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;
}

这里我搞糊涂了——怎么告诉编译器做正确的赋值?

C++ 接管了 C 的函数指针语法。然而,由于 类 的虚拟成员与函数指针做的事情本质上相同,因此在 C++ 中您很少需要 C 风格的函数指针。

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

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;
}