每具身体。我正在读一段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,因此不能识别"auto“和"decltype”。
如何将此代码更改为在c++11编译器下可理解?
任何帮助都是最好的。提前谢谢。
发布于 2016-10-15 23:14:57
在这种情况下,decltype()的使用看起来是多余的。您应该能够将第二个函数替换为以下代码:
template <class T>
float wrap_360_cd(const T angle)
{
return wrap_360(angle, 100.f);
}对于将来的引用,->后面的代码称为尾随返回类型,如果您的函数返回类型是使用auto关键字指定的,这是必需的(这在某些情况下可能很有用,例如当您想要使用wrap_360()指定返回类型时,尽管在这种情况下不需要它,因为您已经知道了decltype()函数的返回类型)。
https://stackoverflow.com/questions/40060523
复制相似问题