如何区分指向重载函数的指针?
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;
}
我有一个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;
}