【发布时间】:2013-05-04 02:13:54
【问题描述】:
我在尝试从另一个模板类中访问模板类的模板成员函数时遇到编译器错误。对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。
【问题讨论】:
-
非常感谢您的这篇文章,从 Clang 错误消息中推断出这个确实非常棘手。