次のような単純なマトリックス クラスがあります。
template <int m, int n>
class matrix {
public:
std::enable_if<std::is_same<matrix, matrix<4,4>>::value, void>
translate(float x, float y, float z) {
// Do stuff
}
private:
float mat[m * n];
};
std::enable_if
をインスタンス化した場合にのみ関数を使用できるようにすることを期待してmatrix<4,4>
いましたが、これは間違っているようです。
int main() {
matrix<4, 3> mat3;
mat3.translate(1.0f, 1.0f, 1.0f);
return 0;
}
上記のコードはエラーなしでコンパイルされます。私は何を間違っていますか?
関数本体に単純に astatic_assert(m == 4 && n == 4)
を入れることができることはわかっていますが、よりクリーンなソリューションを探しており、その過程でテンプレートについて何かを学びたいと思っています。