2010-06-09 3 views
0

Я нашел это в этом файле: http://www.boost.org/doc/libs/1_43_0/boost/spirit/home/phoenix/core/actor.hppC++, что означает этот синтаксис?

Что означает этот синтаксис?

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

Я знаю, что имяТип и шаблоны, на мой вопрос о actor(T0&,T1&) синтаксисе

спасибо

+1

См. [Официально, что такое typename для?] (Http://stackoverflow.com/questions/1600936/officially-what-is-typename-for) –

ответ

2

Таким образом, это означает, что есть шаблон называется result и в результате это тип называется type.

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

Так что эта линия использует этот тип шаблона.

Поскольку компилятор не знает, что такое result<actor(T0&,T1&)>::type, вам необходимо использовать typename, чтобы сообщить компилятору, что он относится к нему как к типу.

Update

actor(T0&,T1&) функция принимает T0& и T1& и возвращая actor по значению.

+0

Что это значит 'actor (T0 &, T1 &)'? – Anycorn

+1

@aaa - функция, принимающая 'T0' и' T1' как по ссылке, так и по возврату «актера» по значению. –

+0

спасибо. Я действительно немного знаком с синтаксисом указателя функции/функции, но я никогда не видел его как параметр шаблона. – Anycorn

3

Полная декларация из этого файла гласит:

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

Если разбить его на куски, это легче читать:

template <typename T0, typename T1> 

Это шаблон ...

operator()(...) const 

... функциональная функция функционального вызова с функциональными функциями ...

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

... который принимает два аргумента, ссылки, типа T0 и T1 ...

typename result<...>::type 

... и возвращает результат, тип которого является type членом result ...

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

... где тип result является paramaterised выражением actor(T0&,T1&).