整数推广,C ++和模板

时间:2010-11-05 13:41:48

标签: c visual-studio-2010 templates gcc c++11

C定义了有关整数提升的各种规则,这里是描述其工作原理的great answer

在GCC中你可以这样做:

#define max(a,b) \
   ({ __typeof__ (a) _a = (a); \
       __typeof__ (b) _b = (b); \
     _a > _b ? _a : _b; })

将评估上述C规则确定的类型的最大值。

在使用混合类型使用std::minstd::max时,有必要提供适当的类型作为模板参数:

size_t const subcount = std::min<Offset>(count, treecap - offset);

要获得根据C整数提升规则评估类型的最小值/最大值,对于左右输入类型的每个组合,有必要知道类型的关联方式以及结果类型的类型。

我希望执行最小/最大,具有与上面给出的GCC下的C样本相同的行为,并且具有相同的促销(从而确保与GCC中相同的行为)。如何在C ++和/或MSVC中执行此操作?

请注意,执行此“自然”min / max后,我将numeric_cast达到预期的尺寸范围。

1 个答案:

答案 0 :(得分:1)

这里有一个非常好的实现,我用于各种项目:http://www.oonumerics.org/blitz/traits.html