我有两个不同的别名类型指向同一主类型:
using TypeA = unsigned long
using TypeB = unsigned long
我正在为他们实施类型特征。我的目标是为它们推断出不同的价值。
template <typename T>
struct LengthTrait {
constexpr static int size = 5;
};
template<>
struct LengthTrait<TypeA> {
constexpr static int size = 4;
};
template<>
struct LengthTrait<TypeB> {
constexpr static int size = 8;
};
但编译器告诉我TypeA和TypeB都是unsigned long
类型,所以代码无法编译。
我的问题是:有什么方法可以区别对待A型和B型吗?
我尝试使用typedef
而不是using
,但它不起作用。
就类型系统而言,别名并不存在,它们都是unsigned long
,其他什么都不是。
据我所知,最接近的事情是让它们成为枚举:
enum TypeA : unsigned long {};
enum TypeB : unsigned long {};
这样,它们是唯一的类型,仍然可以用作整数(有点烦人(。