C ++ - auto和decltype的替代品

时间:2016-10-15 14:55:21

标签: c++ c++11 templates

每个人都有。 我正在阅读一个c ++代码,我面对这个2模板。
第一:

template <class T>
float wrap_360(const T angle, float unit_mod)
{
    const float ang_360 = 360.f * unit_mod;
    float res = fmodf(static_cast<float>(angle), ang_360);
    if (res < 0) {
        res += ang_360;
    }
    return res;
}

,第二个是:

template <class T>
auto wrap_360_cd(const T angle) -> decltype(wrap_360(angle, 100.f))
{
    return wrap_360(angle, 100.f);
}

第一个对我来说是显而易见的,但究竟是第二个想说的是什么?

实际上,我的编译器不支持c ++ 11,因此无法识别&#34; auto&#34;和&#34; decltype&#34;。

如何在c ++ 11编译器下更改此代码是可以理解的?

任何帮助都会很棒。 提前谢谢。

1 个答案:

答案 0 :(得分:4)

在这种情况下,使用decltype()看起来是多余的。您应该能够使用以下内容替换第二个函数:

template <class T>
float wrap_360_cd(const T angle)
{
    return wrap_360(angle, 100.f);
}

供将来参考 - &gt;之后的代码被称为尾随返回类型,如果使用auto关键字指定函数返回类型,则这是必需的(这在某些情况下很有用,例如,当您想使用decltype()指定返回类型时,尽管在这种情况下它因为你已经知道了wrap_360()函数的返回类型,所以不需要。