[英]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
...通过引用接受T0
和T1
类型的两个参数...
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.