2010-02-17 64 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