基于参数类型的模板化返回类型

时间:2019-09-05 20:24:59

标签: c++ c++14

以下函数将返回其参数的签名版本。我只用一个模板参数怎么办?

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>

如果有什么办法可以做到这一点,您的想法将受到赞赏。

1 个答案:

答案 0 :(得分:4)

您可以推断出返回类型:

template <class UINT_TYPE>
auto function_x(const UINT_TYPE n) {
    // ...
    return static_cast<std::make_signed_t<UINT_TYPE>>(n);
}