математика — синтаксис индексации C ++: две библиотеки используют различный синтаксис индексации: индекс на основе 0 и индекс на основе 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. Это решение было предложено одним из парней ниже, который просто работал.

1

Решение

Плохой хак

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

KFULL(0, 0) = 4.0
1

Другие решения

Было бы лучше изменить код AG_Matrix вести себя так, как вы этого хотите. Это имеет самые низкие издержки в сгенерированном коде.

Обходной путь может быть получен из AG_Matrix и переопределение operator()(int,int), Затем вы бы использовали производный класс вместо AG_Matrixи его можно использовать вместо AG_Matrix когда передается в другой код, который ожидает AG_Matrix,

1

По вопросам рекламы [email protected]