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

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:40:10 25 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/52786598/

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