C ++,这个语法是什么意思?

时间:2010-06-09 05:41:03

标签: c++ templates

我在此文件中找到了这个: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&)语法

谢谢

2 个答案:

答案 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

...通过引用获取类型为T0T1的两个参数......

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