我正在处理一个非常简单的模板结构,它的枚举值由它的 2 个模板参数是否相同类型来设置。
template<typename T, typename U> struct is_same { enum { value = 0 }; };
template<typename T> struct is_same<T, T> { enum { value = 1 }; };
这是一个库(Eigen)的一部分,所以我不能改变这个设计而不破坏它。当 时value == 0
,静态断言中止编译。
所以我有一个特殊的数字模板类SpecialCase
,它可以用自己的不同专业进行操作。所以我设置了一个这样的覆盖:
template<typename T> struct SpecialCase { ... };
template<typename LT, typename RT> struct is_same<SpecialCase<LT>, SpecialCase<RT>> { enum { value = 1 }; };
但是,这会引发错误:
more than one partial specialization matches the template argument list
现在,我明白为什么了。情况就是LT == RT
, 踩到 的脚趾is_same<T, T>
。我不知道如何保持我的SpecialCase
覆盖并摆脱错误。有什么技巧可以解决这个问题吗?
编辑:为了澄清,我需要所有LT != RT
被认为相同的情况(值为1)。不只是LT == RT
。