C++ C++;-auto和decltype的备选方案

C++ C++;-auto和decltype的备选方案,c++,c++11,templates,C++,C++11,Templates,每个人。 我正在阅读C++代码,我面对这2个模板。 第一: 模板 浮子包线360(恒定角、浮子单元模块) { 常量浮点ang_360=360.f*单位_mod; 浮动分辨率=fmodf(静态投影(角度),ang_360); 如果(resdecltype(包裹360度(角度,100.f)) { 回绕360度(角度,100.f); } 第一个对我来说很明显,但第二个到底想说什么 实际上,我的编译器不支持C++ 11,所以不承认“Autoto”和“DeCype”。 如何更改此代码以使其在c++11

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

模板
浮子包线360(恒定角、浮子单元模块)
{
常量浮点ang_360=360.f*单位_mod;
浮动分辨率=fmodf(静态投影(角度),ang_360);
如果(res<0){
res+=ang_360;
}
返回res;
}
第二个是:

template <class T>
auto wrap_360_cd(const T angle) -> decltype(wrap_360(angle, 100.f))
{
    return wrap_360(angle, 100.f);
}
模板
自动包裹360度cd(恒定角度)->decltype(包裹360度(角度,100.f))
{
回绕360度(角度,100.f);
}
第一个对我来说很明显,但第二个到底想说什么

<>实际上,我的编译器不支持C++ 11,所以不承认“Autoto”和“DeCype”。 如何更改此代码以使其在c++11编译器下可以理解

任何帮助都会很好。 提前感谢。

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

template <class T>
float wrap_360_cd(const T angle)
{
    return wrap_360(angle, 100.f);
}
模板
浮子缠绕360°cd(恒定角度)
{
回绕360度(角度,100.f);
}

为便于将来参考,->后面的代码称为尾随返回类型,如果使用auto关键字指定函数返回类型,则需要该类型(这在某些情况下非常有用,例如,当您想要使用decltype()时)要指定返回类型,尽管在这种情况下,不需要知道ReaPy360()函数的返回类型。

您使用哪一个C++编译器?走出黑暗时代。这是技术,信息学。继续。
wrap_360()
返回一个独立于参数类型
T
float
。如果这是唯一的重载,您可以只使用
float wrap360_cd(const T angle)
。我认为第二个重载过于通用,以允许将来重载具有不同返回类型的
wrap_360
。如果没有重载,您可以使用
float wrap\u 360\u cd(const T angle)
template <class T>
float wrap_360_cd(const T angle)
{
    return wrap_360(angle, 100.f);
}