gpt4 book ai didi

c++ - 根据 is_integer 转换为 int 或 float

转载 作者:搜寻专家 更新时间:2023-10-31 00:46:49 25 4
gpt4 key购买 nike

我有一些类型T,在某些情况下它可能是,例如char,但我想输出它的整数值,而不是字符。为此,有以下内容:

typedef ( std::numeric_limits< T >::is_integer ? int : float ) FormatType;
os << static_cast< FormatType >( t );

但是编译失败,提示“error C2275: 'int' : illegal use of this type as an expression”。在 intfloat 前加上 typename 并不能解决问题。我在这里缺少什么?

以下,我认为是等价的,有效:

if( std::numeric_limits< T >::is_integer )
{
os << static_cast< int >( t );
}
else
{
os << static_cast< float >( t );
}

最佳答案

What am I missing here?

您正在尝试将类型用作表达式。 C++ 根本不允许这样做。您可以通过元编程使用所谓的“编译时 if”。例如,我相信 Boost 提供以下内容:

typedef if_<std::numeric_limits< T >::is_integer, int, double>::type FormatType;

os << static_cast< FormatType >( t );

另一方面,您的第二个解决方案运行良好,编译器会发现其中一个分支永远不会为真,并将其消除。因此两种情况下的性能将相同(实际上,应该生成完全相同的代码)。

关于c++ - 根据 is_integer 转换为 int 或 float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4690352/

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