gpt4 book ai didi

c++ - 测试 std::is_integral 和 std::is_signed?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:41 25 4
gpt4 key购买 nike

我有一个函数,但我想将它分成两个函数,一个用于返回有符号整数,一个用于返回无符号整数。看起来像 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/

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