TypeA和TypeB是同一个主类型的别名,如何在C++模板中将它们推导为不同的类型



我有两个不同的别名类型指向同一主类型:

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 {};

这样,它们是唯一的类型,仍然可以用作整数(有点烦人(。

相关内容

最新更新