子类中的类模板非类型成员访问

问题描述 投票:0回答:1

我有一个Matrix类模板,看起来像这样:

using matrix_size_t = unsigned int;
using matrix_data_t = double;

template <matrix_size_t row, matrix_size_t col>
class Matrix
{
protected:
    matrix_data_t m_matrix[row][col];

//more code irrelevant to the question...
}

我还有一个子类模板SquareMatrix,看起来像这样:

template <matrix_size_t size>
class SquareMatrix :public Matrix<size, size>
{
public:
    matrix_data_t trace()
    {
        matrix_data_t trace{ 0 };
        for (matrix_size_t j{ 0 }; j < size; ++j)
        {
            trace += m_matrix[j][j]; //C3861 error in MVS: m_matrix identifier not found
        }
        return trace;
    }
};

问题是:我无法从子类访问成员m_matrix

[当我用m_matrix代替Matrix<size,size>::m_matrix时,子类代码起作用:

template <matrix_size_t size>
class SquareMatrix :public Matrix<size, size>
{
public:
    matrix_data_t trace()
    {
        matrix_data_t trace{ 0 };
        for (matrix_size_t j{ 0 }; j < size; ++j)
        {
            trace += Matrix<size, size>::m_matrix[j][j]; //this works
        }
        return trace;
    }
};

我不知道这是否正确。请帮助我了解发生了什么!

c++ templates generic-programming template-classes class-template
1个回答
1
投票

我不知道这是否是正确的选择。

© www.soinside.com 2019 - 2024. All rights reserved.