我在此文件中找到了这个:http://www.boost.org/doc/libs/1_43_0/boost/spirit/home/phoenix/core/actor.hpp
这种语法意味着什么?
struct actor ... {
...
template <typename T0, typename T1>
typename result<actor(T0&,T1&)>::type // this line
我知道什么是类型名称和模板,我的问题是关于actor(T0&,T1&)
语法
谢谢
答案 0 :(得分: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
的类型由actor(T0&,T1&)
表达式表示。
答案 1 :(得分:2)
所以这意味着有一个名为result
的模板,结果中有一个名为type
的类型。
template <class T>
class result
{
public:
typedef ... type;
};
因此该行正在使用模板中的该类型。
因为编译器不知道result<actor(T0&,T1&)>::type
是什么,所以需要使用typename
告诉编译器将其视为一种类型。
<强>更新强>
actor(T0&,T1&)
是一个功能T0&
和T1&
,并按值返回actor
。