2010-06-09 209 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) – 2010-06-09 05:43:23

回答

2

因此,這意味着有一個名爲result模板,結果內一個名爲type類型。

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

因此該行正在使用該模板中的該類型。

因爲編譯器不知道result<actor(T0&,T1&)>::type是什麼,所以您需要使用typename來告訴編譯器將它視爲一種類型。

更新

actor(T0&,T1&)是採取T0&T1&和由值返回一個actor的功能。

+0

這是什麼意思?演員(T0&,T1&)? – Anycorn 2010-06-09 05:46:45

+1

@aaa - 通過引用並通過值返回「actor」來引用「T0」和「T1」的函數。 – 2010-06-09 05:48:14

+0

謝謝。 我實際上對函數/函數指針語法有些熟悉,但我從來沒有將它看作模板參數。 – Anycorn 2010-06-09 05:54:09

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 

...,並返回其類型是resulttype構件結果...

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

...其中result的類型通過表達式actor(T0&,T1&)進行參數化。