c++ - 如何允许通配符模板参数

标签 c++ templates matrix

我目前正在编写一个矩阵类,它将能够通过模板支持任意数量的行和列。我坚持如何防止无效操作(即矩阵 1 的列数 ≠ 矩阵 2 的行数)。我当然可以存储行数和列数并在运行时进行检查,但最佳情况是我想在编译时通过“通配符”模板参数进行此检查。

换句话说...

我想这样做:

template <typename T, int R, int C>
struct mat {

    T matrix[R][C];

    void operator *=(const mat<T, C, [can be anything]> &other) {
        /* do operation */
    }

};

取而代之的是:

template <typename T, int R, int C>
struct mat {

    T matrix[R][C];
    int rows = R;
    int columns = C;

    void operator *=(const mat *other) {
        if (columns != other->rows) {
            /* error */
        } else {
            /* do operation */
        }
    }

};

这可能吗?如果可以,我该怎么做?

最佳答案

这对我有用

template <typename T, int R, int C>
struct mat {

    T matrix[R][C];

    template <int CC>
    void operator *=(const mat<T, C, CC> &other) {
        /* do operation */
    }

};

int main()
{
    mat<int, 2, 3> m1;
    mat<int, 3, 4> m2;
    m1 *= m2;
}

关于c++ - 如何允许通配符模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52239583/

相关文章:

c++ - 项目编译错误 - 找不到 -lwxmsw28

c++ - 用于连接编译时序列的模板元编程

c++ - 模板参数的访问限制

来自类的c++第二个函数无法访问第一个

c++ - 在使用矩阵进行计算时删除 C++ 二维 vector 行

c++ - 什么是 [in] 和 [out]?

c++ - 有什么方法可以将 << 运算符与 stringstream 和带空格的字符串一起使用?

c++ - 如何在函数重载决议中转储候选人?

c++ - 模板参数推导失败

python - 是否有一种已知的算法可以从一个大的协方差矩阵中找到没有零点的最大子矩阵?