【问题标题】:C++, what does this syntax mean?C++,这个语法是什么意思?
【发布时间】:2010-06-09 13:52:20
【问题描述】:

我在这个文件中找到了这个: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

我知道 typename 和 templates 是什么,我的问题是关于 actor(T0&amp;,T1&amp;) 语法

谢谢

【问题讨论】:

标签: c++ templates


【解决方案1】:

该文件的完整声明如下:

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&amp;,T1&amp;) 参数化。

【讨论】:

    【解决方案2】:

    所以这意味着有一个名为 result 的模板,并且在 result 中有一个名为 type 的类型。

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

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

    因为编译器不知道result&lt;actor(T0&amp;,T1&amp;)&gt;::type是什么,所以需要用typename告诉编译器把它当作一个类型来对待。

    更新

    actor(T0&amp;,T1&amp;) 是一个函数,采用 T0&amp; 和 T1&amp; 并按值返回 actor。

    【讨论】:

    • actor(T0&amp;,T1&amp;) 是什么意思?
    • @aaa - 一个函数通过引用获取T0 和T1,并通过值返回actor。
    • 谢谢。我实际上对函数/函数指针语法有些熟悉,但我从未将其视为模板参数。
    • @aaa 澄清一下,它不是函数 call(因为它看起来很相似),但它是函数的 type。
    猜你喜欢
    • 2011-11-13
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2012-07-25
    • 2014-03-31
    • 1970-01-01
    相关资源
    最近更新 更多