2010-06-09 7 views
0

J'ai trouvé ceci dans ce fichier: http://www.boost.org/doc/libs/1_43_0/boost/spirit/home/phoenix/core/actor.hppC++, que signifie cette syntaxe?

Que signifie cette syntaxe?

struct actor ... { 
     ... 
     template <typename T0, typename T1> 
     typename result<actor(T0&,T1&)>::type // this line 

Je sais ce que typename et modèles sont, ma question porte sur actor(T0&,T1&) syntaxe

merci

+1

Voir [Officiellement, quel est le nom de fichier pour?] (Http://stackoverflow.com/questions/1600936/officially-what-is-typename-for) –

Répondre

2

Cela signifie donc qu'il ya un modèle appelé result et dans le résultat est un type appelé type.

template <class T> 
class result 
{ 
public: 
    typedef ... type; 
}; 

Cette ligne utilise ce type à partir du modèle.

Parce que le compilateur ne sait pas ce que result<actor(T0&,T1&)>::type est, vous devez utiliser typename pour indiquer au compilateur de le traiter comme un type.

Mise à jour

actor(T0&,T1&) est une fonction qui prend une T0& et un T1& et retourner un actor en valeur.

+0

Qu'est-ce que cela signifie 'acteur (T0 &, T1 &)'? – Anycorn

+1

@aaa - une fonction prenant un 'T0' et' T1' par référence et retournant un 'acteur 'par valeur. –

+0

merci. Je suis en fait un peu familier avec la syntaxe de pointeur de fonction/fonction, mais je ne l'ai jamais vu comme paramètre de modèle. – Anycorn

3

La déclaration complète de ce fichier est ainsi libellé:

template <typename T0, typename T1> 
typename result<actor(T0&,T1&)>::type 
operator()(T0& _0, T1& _1) const 
{ 
    /* snip */ 
} 

Si vous le décomposer en morceaux, il est plus facile à lire:

template <typename T0, typename T1> 

Il est un modèle ...

operator()(...) const 

... une fonction d'opérateur de fonction-appel de modèle ...

operator()(T0& _0, T1& _1) const 

... qui prend deux arguments, par référence, de type T0 et T1 ...

typename result<...>::type 

... et renvoie un résultat dont le type est le membre type de result ...

typename result<actor(T0&,T1&)>::type 

... où le type de result est paramaterised par l'expression actor(T0&,T1&).