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编译器下更改此代码是可以理解的?
任何帮助都会很棒。 提前谢谢。
答案 0 :(得分:4)
在这种情况下,使用decltype()看起来是多余的。您应该能够使用以下内容替换第二个函数:
template <class T>
float wrap_360_cd(const T angle)
{
return wrap_360(angle, 100.f);
}
供将来参考 - &gt;之后的代码被称为尾随返回类型,如果使用auto关键字指定函数返回类型,则这是必需的(这在某些情况下很有用,例如,当您想使用decltype()指定返回类型时,尽管在这种情况下它因为你已经知道了wrap_360()函数的返回类型,所以不需要。