在此示例中,coord_squared_t是整数类型的别名,其大小至少是整数类型的两倍coord_t:
typedef int_least32_t coord_t;
coord_squared_t CalculateSquaredHypothenuse(coord_t x, coord_t y){
coord_squared_t _x=x;
coord_squared_t _y=y;
return _x*_x+_y*_y;
}
Run Code Online (Sandbox Code Playgroud)
什么可以用来表现coord_squared_t在以下方面coord_t?标准库中是否有任何东西可以让我做一些像double_width<coord_t>::type获得正确宽度的东西,而不是明确选择类型?
C++ 11或C++ 14很好.
这是来自C++ Primer Chapter 16.2.3(问题16.41)的问题:
写一个sum的版本,其返回类型保证足够大以保存添加的结果.
我敢肯定,有可能是能得到这份工作做了一些默默无闻的STL功能,但在章的背景下,推出标准型转换模板,如remove_reference<T>和make_signed<T>我敢肯定,它打算为我用它来做到这一点,与尾随返回类型一起使用.我能做的最好的事情是:
template <typename It> auto sum(It first, It second) -> typename make_unsigned<It>::type {
return first+second;
}
Run Code Online (Sandbox Code Playgroud)
这几乎回答了问题,但并不完全,它没有考虑到我可以传递两个unsigned ints的事实,这两个s加上超出了unsigned int可以容纳的值范围(因此循环回零).据我所知,转换模板无法帮助解决这个问题,是否有可能将返回类型推断为从传递的参数推导出的整数类型中的下一个最大整数类型?