Lea*_*pcs 1 c++ templates overloading
考虑这段代码:
template <typename T>
T abs(const T& n)
{
if (!std::is_signed<T>::value)
throw logic_error;
if (n < 0)
return -n;
return n;
}
Run Code Online (Sandbox Code Playgroud)
我想完全禁止我的函数与变量的使用unsigned,因为它没有意义,而且可能用户甚至不知道他使用了变量unsigned。例如,我可以在某种程度上避免这个问题:
template <typename T>
T abs(const T& n)
{
if constexpr(!std::is_signed<T>::value)
n += "";
if (n < 0)
return -n;
return n;
}
Run Code Online (Sandbox Code Playgroud)
但如果我调用abs(4u),编译器错误不是很明显。就像是"can't apply += const char[1] to double"。我可以让它更明显吗?或者只是进行多次重载?
#include <type_traits>
template <typename T>
T abs(T n)
{
static_assert(std::is_signed<T>::value, "Type must be signed.");
if (n < 0) { return -n; }
return n;
}
int main()
{
return abs(3u);
}
Run Code Online (Sandbox Code Playgroud)