私は現在、次のシグネチャを持つ汎用ベクトルテンプレートクラス(コンテナではなく幾何学的エンティティ)を作成しています...
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に代わるものはありますか?
どうもありがとうございます。