gpt4 book ai didi

c++ - 获取没有显式特征的整数模板参数的有符号/无符号变体

转载 作者:IT老高 更新时间:2023-10-28 21:56:44 24 4
gpt4 key购买 nike

我希望定义一个模板类,其模板参数将始终为整数类型。该类将包含两个成员,一个是 T 类型,另一个是 T 类型的无符号变体——即如果 T == int,然后是 T_Unsigned == unsigned int。我的第一直觉是这样做:

template <typename T> class Range {
typedef unsigned T T_Unsigned; // does not compile
public:
Range(T min, T_Unsigned range);
private:
T m_min;
T_Unsigned m_range;
};

但它不起作用。然后我考虑使用部分模板特化,如下所示:

template <typename T> struct UnsignedType {}; // deliberately empty
template <> struct UnsignedType<int> {
typedef unsigned int Type;
};

template <typename T> class Range {
typedef UnsignedType<T>::Type T_Unsigned;
/* ... */
};

只要您为 每个 整数类型部分专门化 UnsignedType 就可以了。这是一些额外的复制粘贴工作(削减对宏的明智使用),但可以使用。

但是,我现在很好奇 - 是否有另一种方法可以确定整数类型的有符号性和/或使用类型的无符号变体,而无需手动定义每个类型的 Traits 类?或者这是唯一的方法吗?

最佳答案

答案在<type_traits>

要确定类型的符号性,请使用 std::is_signedstd::is_unsigned .

对于添加/删除签名,有 std::make_signedstd::make_unsigned .

关于c++ - 获取没有显式特征的整数模板参数的有符号/无符号变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2824431/

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