2010-02-17 98 views
11

我剛開始使用C++後,沒有使用它很長一段時間。雖然其中大部分是有道理的,但我還是會找到一些點位confuddling。例如,可能有人請解釋一下此行的作用:有人可以解釋這個C++ typedef嗎?

typedef bool (OptionManager::* OptionHandler)(const ABString& value); 
+2

我很想知道爲什麼有人低估了這個... – 2010-02-17 05:40:24

+0

毫無疑問,這是重複的。問題是,我們遇到的問題與您遇到的問題一樣多。 (不是我downvote順便說一句) – MSalters 2010-02-17 09:11:36

+3

很高興看到我不是唯一一個找到函數指針語法尷尬......在最好的時間! – 2010-02-17 12:49:22

回答

26

它定義類型OptionHandler是一個指針類OptionManager的成員函數,並在該成員函數有const ABString&類型,並返回的參數bool

4

這是一個指向OptionManager的成員函數,它接受一個const ABString refrence並返回一個布爾

2

它是一個typedef的指針成員函數。請檢查C++ FAQ

9
typedef bool (OptionManager::* OptionHandler)(const ABString& value); 

讓我們先從:

OptionManager::* OptionHandler 

這就是說::* OptionHandler是類OptionManager的成員函數。 在OptionHandler前面的*表示它是一個指針;這意味着OptionHandler是指向OptionManager類的成員函數的指針。

(const ABString& value)表示成員函數會將類型ABString的值轉換爲const引用。

bool說成員函數將返回一個布爾類型。

typedef說使用「* OptionHandler」你可以創建許多函數指針,它可以存儲該函數的地址。例如:

OptionHandler fp[3]; 

fp[0], fp[1], fp[2]將存儲其語義符合上述說明的函數的地址。

+2

不錯,你把類型分成小塊,但「':: * OptionHandler'是一個成員函數」:爲什麼不是一個普通成員?只有在看周圍環境時才能檢測到。 – xtofl 2010-03-19 12:47:58