= 0 && n = 0 is always true 当 T 是 unsigned 类型时,有什么聪明-6ren">
gpt4 book ai didi

c++ - 基于整数类型 "signed-ness"的部分模板特化?

转载 作者:IT老高 更新时间:2023-10-28 21:45:30 26 4
gpt4 key购买 nike

给定:

template<typename T>
inline bool f( T n ) {
return n >= 0 && n <= 100;
}

当与 unsigned 类型一起使用时会产生警告:

unsigned n;
f( n ); // warning: comparison n >= 0 is always true

Tunsigned 类型时,有什么聪明的方法不进行比较 n >= 0 吗?我尝试添加部分模板特化:

template<typename T>
inline bool f( unsigned T n ) {
return n <= 100;
}

但是 gcc 4.2.1 不喜欢这样。 (无论如何,我认为 那种 部分模板特化是不合法的。)

最佳答案

您可以将 enable_ifis_unsigned 类型特征一起使用:

template <typename T>
typename std::enable_if<std::is_unsigned<T>::value, bool>::type f(T n)
{
return n <= 100;
}

template <typename T>
typename std::enable_if<!std::is_unsigned<T>::value, bool>::type f(T n)
{
return n >= 0 && n <= 100;
}

如果您的编译器支持,您可以在 stdstd::tr1 命名空间中找到 enable_ifis_unsigned分别是 C++0x 或 TR1。否则,Boost 有一个类型特征库的实现,Boost.TypeTraits . enable_if 的 boost 实现有点不同; boost::enable_if_c 类似于 TR1 和 C++0x enable_if

关于c++ - 基于整数类型 "signed-ness"的部分模板特化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4762110/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com