別のテンプレートクラス内からテンプレートクラスのテンプレートメンバー関数にアクセスしようとすると、コンパイラエラーが発生します。 getSubmatrix
への関数呼び出しでは、パラメータ(0, 0)
に関するコンパイラの警告「式の結果は未使用」になり、最終的にコンパイラエラー「非静的メンバ関数への参照を呼び出す必要があります。別のテンプレートクラスからテンプレートクラスのテンプレートメンバー関数を呼び出すことができません
行列クラス:
template <std::size_t m, std::size_t n, typename T, std::size_t rowPadding = 0>
class Matrix
{
public:
...
template <std::size_t p, std::size_t q>
Matrix<p, q, T, n - q>& getSubmatrix(std::size_t column, std::size_t row)
{
...
}
};
変換クラス:Matrix<4, 4, float>
ではなくMatrix<4, 4, T>
にマトリックスタイプを変更すると、有効なコンパイルをもたらすこと
template <typename T>
class Transform
{
public:
...
Matrix<4, 4, T> matrix() const
{
...
Matrix<4, 4, T> result;
result.getSubmatrix<3, 3>(0, 0) = Matrix<3, 3, T>();
...
}
};
注意。コンパイラはclang 4.0、言語バージョンはC++ 11です。
このエントリは大変ありがとうございます。これは本当にClangのエラーメッセージから推測するのが非常に難解でした。 –