我有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;
}
在这里我感到困惑 - 如何对编译器说出正确的作业?
答案 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 ++将通过匹配函数指针参数列表中的类型来解决。