2017-06-21 42 views
-3

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

在這裏,我迷惑了 - 怎麼說來編譯器做正確的任務?

+1

,你不能有一個結構的兩名成員在C –

+1

同一名稱,將無法編譯有在C'位掩碼和self'沒有重載函數是不是一個有效C聲明。也許你正在研究錯誤的語言。 –

+1

這顯然是C++。您需要更改標籤。 – HolyBlackCat

回答

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

C++接管了C的函數指針語法。然而,類的虛擬成員與函數指針本質上是一樣的,你很少需要C++中的C風格函數指針。

如果你有一個重載函數,C++將通過匹配函數指針的參數列表中的類型來解析。