c++ - 无法从另一个模板类调用模板类的模板成员函数

标签 c++ templates

尝试从另一个模板类中访问模板类的模板成员函数时出现编译器错误。对 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> and int to binary operator<

关于c++ - 无法从另一个模板类调用模板类的模板成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16369912/

相关文章:

c++ - 关于复制构造函数和重载赋值运算符

c++ - 在 Linux 上的 C++ 无限循环中捕获内存不足的错误 bad_alloc()

c++ - 在 0 显式启动 C/C++ 枚举的原因

c++ - boost::make_shared() 与模板化类?

c++ - 视觉 C++ 2005 : How to view the window during a debugging session

c++ - 这个奇怪的错误是什么意思?

javascript - 我可以将 html 元素传递到 jinja 变量中吗?

java - 如何在 Eclipse 中使用实时模板?

templates - Web 开发人员的项目模板目录

C++ 模板类 : error: no matching function for call to