我目前正在编写具有以下签名的通用矢量模板类(几何实体,而不是容器)...
template< typename T, unsigned N >
class vector
{...}
... 其中 T 是算术类型,N 是维度。我想将叉积定义为运算符 ^ 的重载(位于类定义内)并仅在 N == 3 时启用它。我现在拥有的是:
typename boost::lazy_enable_if_c< (N == 3), vector >::type
inline operator ^(const vector &rhs) const
{
vector ret;
ret(0) = val_[1] * rhs(2) - val_[2] * rhs(1);
ret(1) = val_[2] * rhs(0) - val_[0] * rhs(2);
ret(2) = val_[0] * rhs(1) - val_[1] * rhs(0);
return ret;
}
不幸的是,使用 N != 3 实例化此模板,即使未引用运算符 ^,也会产生以下错误:
error: no type named ‘type’ in ‘struct boost::lazy_enable_if_c < false, flare::math::vector < flare::math::fixed < short int, 8u >, 2u > >’
我究竟做错了什么?在这种情况下是否有替代 boost::enable_if 的方法?
非常感谢。