Bla*_*way 19 c++ unsigned templates partial-specialization traits
我想定义一个模板类,其模板参数将始终是一个整数类型.该类将包含两个成员,一个是类型,另一个是类型T的无符号变体T- 即if T == int,then 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;
};
Run Code Online (Sandbox Code Playgroud)
但它不起作用.然后我考虑使用部分模板专业化,如下所示:
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;
/* ... */
};
Run Code Online (Sandbox Code Playgroud)
只要您UnsignedType对每个整数类型进行部分专门化,这都可以.这是一些额外的复制粘贴工作(削减明智地使用宏),但可以使用.
但是,我现在很好奇 - 有没有另一种方法可以确定整数类型的signed-ness,和/或使用类型的无符号变体,而不必手动定义每类型的Traits类?或者这是唯一的方法吗?
Ter*_*fey 22
答案是在 <type_traits>
要确定类型的signed-ness,请使用std :: is_signed和std :: is_unsigned
对于添加/删除signed-ness,有std :: make_signed和std :: make_unsigned
| 归档时间: |
|
| 查看次数: |
2616 次 |
| 最近记录: |