尝试从另一个模板类中访问模板类的模板成员函数时出现编译器错误。对 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)
{
...
}
};
转换类:
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>();
...
}
};
请注意,将矩阵类型更改为 Matrix<4, 4, float>
而不是 Matrix<4, 4, T>
将导致有效的编译。编译器为clang 4.0,语言版本为C++11。
最佳答案
您应该添加关键字 template
:
result.template getSubmatrix<3, 3>(0, 0) = Matrix<3, 3, T>();
// ^^^^^^^^
没有它,编译器会认为 <
是比较运算符。
附言。在这种情况下,g++ 会产生一些更容易理解的错误:
error: invalid operands of types
<unresolved overloaded function type>
andint
to binaryoperator<
关于c++ - 无法从另一个模板类调用模板类的模板成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16369912/