Я хочу использовать некоторый код C ++, который не написан мной.
Однако в коде много индексов массива вне диапазона.
Кроме того, длины массивов могут быть не фиксированными; например, они могут быть определены размером входного изображения.
У меня не хватает бюджета, чтобы исправить их вручную, поэтому я задаю этот вопрос здесь.
я надеюсь a[i]
может быть a[0]
если i<0
а также a[a.Length-1]
если i>=a.Length
, но я могу сохранить код a[i]
,
Как мне это сделать?
Вы можете написать (шаблонный) класс, который обернет массив и перегрузит оператор [] для выполнения проверенного доступа границ к базовому массиву. Затем вы можете использовать этот класс вместо обычных массивов Си.
Насколько это возможно, будет зависеть от того, как приложение использует массив. Если массив является переменной gloabl или частью структуры / класса и доступ к нему только когда-либо [], то он будет работать прекрасно, но если массив будет передан по окружности путем «разложения» на указатель (и обратите внимание, что параметры массива действительно указатели параметров), тогда потребуется дополнительная работа, изменение типов параметров и, возможно, создание отдельного класса «проверенной ссылки на массив», который будет использоваться в дополнение к вашему «проверенному массиву».
Вы можете попробовать обертку class
который инициализируется с исходным массивом, а затем использует operator[]
вести себя так, как тебе нужно.