Как показано на следующем рисунке, в моем коде 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. Это решение было предложено одним из парней ниже, который просто работал.
Плохой хак
#define KFULL(row, column) KFull(row + 1, column + 1)
KFULL(0, 0) = 4.0
Было бы лучше изменить код AG_Matrix
вести себя так, как вы этого хотите. Это имеет самые низкие издержки в сгенерированном коде.
Обходной путь может быть получен из AG_Matrix
и переопределение operator()(int,int)
, Затем вы бы использовали производный класс вместо AG_Matrix
и его можно использовать вместо AG_Matrix
когда передается в другой код, который ожидает AG_Matrix
,