2010-02-17 12 views
11

Acabo de empezar a trabajar con C++ después de no haber trabajado con él por bastante tiempo. Si bien la mayor parte tiene sentido, hay algunos bits que encuentro un poco confuddling. Por ejemplo, podría alguien por favor explicar lo que hace esta línea:¿Alguien puede explicar este tipo de deferencia C++?

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

Tengo curiosidad por saber por qué alguien rechazó esta ... –

+0

Es sin duda un duplicado. El punto es que tenemos tantos problemas para encontrar preguntas idénticas como tú. (no mi voto negativo por cierto) – MSalters

+3

Me alegra ver que no soy el único que encuentra las funciones sintaxis del puntero incómodas ... ¡en el mejor de los casos! –

Respuesta

26

Define el tipo OptionHandler a ser un puntero a una función miembro de la clase OptionManager, y donde esta función de miembro toma un parámetro de tipo const ABString& y vuelve bool.

4

Esto es un puntero a una función miembro de OptionManager que tiene una constante ABString refrence y devuelve un bool

2

Es un typedef de un puntero a la función miembro. Por favor marque C++ FAQ.

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

Vamos a empezar con:

OptionManager::* OptionHandler 

Esto dice que ::* OptionHandler es una función miembro de la clase OptionManager. El * delante de OptionHandler dice que es un puntero; esto significa que OptionHandler es un puntero a una función miembro de una clase OptionManager.

(const ABString& value) dice que la función de miembro tomará un valor de tipo ABString en una referencia constante.

bool dice que la función miembro devolverá un tipo booleano.

typedef dice que con "* OptionHandler" puede crear muchos punteros a funciones que pueden almacenar esa dirección de esa función. Por ejemplo:

OptionHandler fp[3]; 

fp[0], fp[1], fp[2] almacenará las direcciones de las funciones cuyo partido de la semántica con la explicación anterior.

+2

Es bueno que dividas el tipo en piezas más pequeñas, pero "' :: * OptionHandler' es una función miembro ": ¿por qué no un miembro simple? Esto solo se detecta al mirar el entorno. – xtofl

Cuestiones relacionadas