尝试从另一模板类中访问模板类的模板成员函数时出现编译器错误。对getSubmatrix
的函数调用导致编译器警告“表达式结果未使用”,有关参数(0, 0)
,最终因编译器错误而失败“必须调用对非静态成员函数的引用”。无法从另一个模板类中调用模板类的模板成员函数
Matrix类:
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>
将导致有效的汇编。编译器是铛4.0,语言版本是C++ 11。
非常感谢您对此条目的评价,这实在是非常棘手的。 – 2014-08-27 15:05:37