以下函数将返回其参数的签名版本。我只用一个模板参数怎么办?
template<class UINT_TYPE>
INT_TYPE function_x(const UINT_TYPE n)
{
static_assert(std::is_same<UINT_TYPE, uint32_t>::value ||
std::is_same<UINT_TYPE, uint64_t>::value,
"Wrong type passed.");
return static_cast<INT_TYPE>(n);
}
可以使用两个带有默认值的模板参数,但这不是首选。
template<class UINT_TYPE, class INT_TYPE = typename std::make_signed<UINT_TYPE>::type>
如果有什么办法可以做到这一点,您的想法将受到赞赏。
答案 0 :(得分:4)
您可以推断出返回类型:
template <class UINT_TYPE>
auto function_x(const UINT_TYPE n) {
// ...
return static_cast<std::make_signed_t<UINT_TYPE>>(n);
}