重载函数调用操作符(),用于索引和分配模板对象

丹尼尔·福斯特

我正在尝试为矩阵数据结构创建模板,我想以一种简洁直观的方式来索引和分配元素(即“ A(i,j)”返回元素,而“ A(i,j)= x '为此元素分配一个值。)

在其他论坛线程的基础上,我看到通过按引用返回数组元素,函数/运算符可以通过这种方式返回和更改该元素。

template <typename T, int Rows, int Cols>
    struct Matrix {
        private:
        public:
            const int rows = Rows; //number of rows
            const int cols = Cols; //number of columns
            T data[Rows*Cols];     //contents of matrix

            //Single element indexing and assigment
            T& operator() (int i, int j) {
                return data[ (i-1)*(this->cols) + j ];
            }
    };

int main(){
    const int m = 3;
    const int n = 4;
    Matrix<float, m, n> A;

    for (int i = 0; i < A.rows; i++) {
        for (int j = 0; j < A.cols; j++) {
            A(i,j) = 3.14;
        }
    }

    return 0;
}

当我尝试使用显式类型的结构(在本例中为int)而不是模板时,这种方法非常有效,但是现在我使用的是模板,因此赋值'A(i,j)= x'可以修改索引“ i”和“ j”通常会中断循环并导致分段错误。

有谁知道为什么会这样,是否有什么我可以做以达到预期效果的?

我对C ++相当陌生,因此如果我违反最佳实践,请随时让我知道该语言

萨胡

用于索引的公式data不正确。

更新您的函数以data[0]始终返回但打印索引。输出将清楚表明您没有使用正确的索引。

T& operator() (int i, int j) {
    int index = (i-1)*(this->cols) + j;
    std::cout << "Index: " << index << std::endl;
    
    return data[0];  // This is wrong but that's not the
                     // purpose of this suggested change.
}

有用的链接:如何调试小程序

PS正确的索引是i*(this->cols) + j

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

传递对模板函数调用操作符重载的引用

来自分类Dev

传递对模板函数调用操作符重载的引用

来自分类Dev

模板中的<操作符重载

来自分类Dev

C ++在操作符重载函数内创建,分配新变量并将其与两个对象进行比较

来自分类Dev

带有模板操作符重载的奇怪错误

来自分类Dev

如何正确重载<<操作符?

来自分类Dev

让 Xcode 高亮操作符重载

来自分类Dev

在操作符重载中使用可变参数模板合法吗?

来自分类Dev

在模板化类中重载<<操作符会给我链接器错误(C ++)

来自分类Dev

我该如何修复同一类但模板参数不同的操作符重载?

来自分类Dev

在模板化类中重载<<操作符会给我链接器错误(C ++)

来自分类Dev

C ++和汇编语言:使用ASM调用“新操作符”和“删除操作符”

来自分类Dev

如何重载<<操作符,以便可以将对象的数据写入文件?

来自分类Dev

在C ++中使用友函数进行I / O操作符重载

来自分类Dev

为什么此操作符<重载函数对STL算法不可见?

来自分类Dev

在C ++中使用友函数进行I / O操作符重载

来自分类Dev

操作符重载如何与功能重载共存

来自分类Dev

在操作符()()中使用带状态和两个参数的函数对象使用boost绑定

来自分类Dev

<<操作符模板的实现// C ++

来自分类Dev

在重载的<<运算符内使用<<操作符

来自分类Dev

重载下标运算符以根据分配的类型调用函数

来自分类Dev

编译代码时出错 | 操作符在模板定义下重载,使用 VS2017 Update8.2

来自分类Dev

函数重载和模板

来自分类Dev

操作符!=不匹配(操作数类型是指针和对象)

来自分类Dev

重载<<操作符。参考返回到哪里/谁?

来自分类Dev

如何访问标准*操作符重载后的行为*?

来自分类Dev

对带有操作符重载的移动语义感到困惑

来自分类Dev

如何重载<<操作符以打印类成员?

来自分类Dev

如何重载<<操作符,使其仅影响类的成员?

Related 相关文章

  1. 1

    传递对模板函数调用操作符重载的引用

  2. 2

    传递对模板函数调用操作符重载的引用

  3. 3

    模板中的<操作符重载

  4. 4

    C ++在操作符重载函数内创建,分配新变量并将其与两个对象进行比较

  5. 5

    带有模板操作符重载的奇怪错误

  6. 6

    如何正确重载<<操作符?

  7. 7

    让 Xcode 高亮操作符重载

  8. 8

    在操作符重载中使用可变参数模板合法吗?

  9. 9

    在模板化类中重载<<操作符会给我链接器错误(C ++)

  10. 10

    我该如何修复同一类但模板参数不同的操作符重载?

  11. 11

    在模板化类中重载<<操作符会给我链接器错误(C ++)

  12. 12

    C ++和汇编语言:使用ASM调用“新操作符”和“删除操作符”

  13. 13

    如何重载<<操作符,以便可以将对象的数据写入文件?

  14. 14

    在C ++中使用友函数进行I / O操作符重载

  15. 15

    为什么此操作符<重载函数对STL算法不可见?

  16. 16

    在C ++中使用友函数进行I / O操作符重载

  17. 17

    操作符重载如何与功能重载共存

  18. 18

    在操作符()()中使用带状态和两个参数的函数对象使用boost绑定

  19. 19

    <<操作符模板的实现// C ++

  20. 20

    在重载的<<运算符内使用<<操作符

  21. 21

    重载下标运算符以根据分配的类型调用函数

  22. 22

    编译代码时出错 | 操作符在模板定义下重载,使用 VS2017 Update8.2

  23. 23

    函数重载和模板

  24. 24

    操作符!=不匹配(操作数类型是指针和对象)

  25. 25

    重载<<操作符。参考返回到哪里/谁?

  26. 26

    如何访问标准*操作符重载后的行为*?

  27. 27

    对带有操作符重载的移动语义感到困惑

  28. 28

    如何重载<<操作符以打印类成员?

  29. 29

    如何重载<<操作符,使其仅影响类的成员?

热门标签

归档