1

如下图所示,我的 C++ 代码中有两个库,它们使用不同的索引语法,一个以 0 开头,另一个以 1 开头。C++ 代码非常复杂,这种差异对我来说很麻烦。我想知道以前是否有人遇到过这个麻烦,以及是否有这个技巧。我不知道,例如有没有一个技巧可以使它们具有相同的索引语法!!?

在此处输入图像描述

在此处输入图像描述

我用这样的东西解决了这个问题:

#define KFULL(row,col) kFull(row+1,col+1)
    AG_Matrix kFull(4,4,5.0);
    std::cout<<kFull(1,1)<<'\n';//prints 5
    std::cout<<kFull(0,0)<<'\n';//prints garbage value
    std::cout<<KFULL(0,0)<<'\n';//prints 5
    int i=int(0);int j=int(0);
    std::cout<<KFULL(i,j)<<'\n';//prints 5

因此,每次我声明一个AG_Matrix类对象时,我也会为该对象定义一个宏来处理基于 0 和基于 1 的索引问题。这个解决方案是由下面一位简单有效的人提出的。

4

2 回答 2

1

坏黑客

#define KFULL(row, column) KFull(row + 1, column + 1)

KFULL(0, 0) = 4.0
于 2014-09-25T18:20:27.087 回答
1

最好修改代码AG_Matrix以按照您想要的方式运行。这在生成的代码中具有最低的开销。

一种解决方法是派生AG_Matrix并重新实现operator()(int,int). 然后,您将使用派生类而不是AG_Matrix,并且可以AG_Matrix在传递给其他需要AG_Matrix.

于 2014-09-25T18:15:36.470 回答