我剛開始使用C++後,沒有使用它很長一段時間。雖然其中大部分是有道理的,但我還是會找到一些點位confuddling。例如,可能有人請解釋一下此行的作用:有人可以解釋這個C++ typedef嗎?
typedef bool (OptionManager::* OptionHandler)(const ABString& value);
我剛開始使用C++後,沒有使用它很長一段時間。雖然其中大部分是有道理的,但我還是會找到一些點位confuddling。例如,可能有人請解釋一下此行的作用:有人可以解釋這個C++ typedef嗎?
typedef bool (OptionManager::* OptionHandler)(const ABString& value);
它定義類型OptionHandler
是一個指針類OptionManager
的成員函數,並在該成員函數有const ABString&
類型,並返回的參數bool
。
這是一個指向OptionManager的成員函數,它接受一個const ABString refrence並返回一個布爾
它是一個typedef的指針成員函數。請檢查C++ FAQ。
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]
將存儲其語義符合上述說明的函數的地址。
不錯,你把類型分成小塊,但「':: * OptionHandler'是一個成員函數」:爲什麼不是一個普通成員?只有在看周圍環境時才能檢測到。 – xtofl 2010-03-19 12:47:58
我很想知道爲什麼有人低估了這個... – 2010-02-17 05:40:24
毫無疑問,這是重複的。問題是,我們遇到的問題與您遇到的問題一樣多。 (不是我downvote順便說一句) – MSalters 2010-02-17 09:11:36
很高興看到我不是唯一一個找到函數指針語法尷尬......在最好的時間! – 2010-02-17 12:49:22