- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个函数,但我想将它分成两个函数,一个用于返回有符号整数,一个用于返回无符号整数。看起来像 std::is_signed
不是严格意义上的整数,所以我想我是否可以对类似 std::is_integral<T>::value && std::is_signed<T>::value
的东西进行模板测试但这是行不通的。现在我将签名测试作为 if 语句:
template<typename T>
typename std::enable_if
<
std::is_integral<T>::value,
T
>::type
foo()
{
if( std::is_signed<T>::value )
{
//signed
}
else
{
//unsigned
}
}
编辑。 我使用的是 Visual Studio 2010。实际上,看起来发生的事情是 Visual Studio 不接受两个模板,其中一个模板带有 std::is_integral<T>::value && std::is_signed<T>::value
。和一个 std::is_integral<T>::value && std::is_unsigned<T>::value
.它告诉我function template has already been defined
.我做错了吗?是否有一种更符合标准的方法来拥有两个函数,一个用于返回无符号整数,一个用于返回有符号整数?
最佳答案
糟糕...刚刚看到您的编辑...所以您正在尝试创建替代代码...这在 ideone demo here 中有效:
template <typename T>
typename std::enable_if<std::is_integral<T>::value && std::is_signed<T>::value,
int>::type f();
template <typename T>
typename std::enable_if<std::is_integral<T>::value && !std::is_signed<T>::value,
unsigned>::type f();
...
您想用 VS2010 试一试并报告结果吗?
或者,您可以使用 std::conditional
执行此操作结合问题代码中的 if
语句 - 未使用的代码将在编译时优化掉)。
关于c++ - 测试 std::is_integral 和 std::is_signed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22602521/
两者都是 std::is_signed和 std::numeric_limits::is_signed应该给出关于 T 的签名的答案. 为什么现在有两个符号指示符(即自 C++11 起)? 最佳答案
我想检查变量是否有符号。我找到了一个名为 is_signed 的类模板但我不能使用它,因为我是 C++ 的新手。如何检查变量是否已签名? #include #include int main()
谁能解释一下,为什么 #include #include using namespace std; enum E : signed int { a=-1, b = 1,}; int main()
我知道 std::numeric_limits::is_signed 永远是错误的,但对于 std::is_signed::value 也是如此吗? ?谢谢 最佳答案 std::is_signed定义
我有一个函数,但我想将它分成两个函数,一个用于返回有符号整数,一个用于返回无符号整数。看起来像 std::is_signed不是严格意义上的整数,所以我想我是否可以对类似 std::is_integr
我是一名优秀的程序员,十分优秀!