繁体   English   中英

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

[英]C++, what does this syntax mean?

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

谢谢

该文件的完整声明为:

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

...并返回类型为result的type成员的result ...

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

...其中result的类型由表达式actor(T0&,T1&)

因此,这意味着存在一个名为result的模板,并且在result内的是一个名为type

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

因此,该行正在使用模板中的该类型。

因为编译器不知道result<actor(T0&,T1&)>::type是什么,所以您需要使用typename来告诉编译器将其视为类型。

更新

actor(T0&,T1&)是一个函数,它接受T0&T1&并通过值返回一个actor

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM