В проекте может быть множество Single массивов, все одинакового размера. С массивами выполняются разнообразные простые операции, например, массивы можно почленно сложить или перемножить.
Эти действия оформлены в отдельные процедуры. Крайне желательно, чтобы при наборе кода, использующего процедуры, работал IntelliSense, и чтобы процедуры не принимали параметром другие Single массивы.
Я обернул массив в тип:
- Код: Выделить всё
Public Type tTF
Ar() As Single
End Type
Так выглядит процедура сложения массивов:
- Код: Выделить всё
Public Sub tTFAdd(Dst As tTF, Src1 As tTF, Src2 As tTF)
Dim i As Long
For i = 0 To TFSize - 1
Dst.Ar(i) = Src1.Ar(i) + Src2.Ar(i)
Next i
End Sub
TFSize, как нетрудно догадаться, это общий размер массивов.
Работает быстро, ничего лишнего в процедуру не подсунешь, но такой подход вынуждает каждый массив инициализировать:
- Код: Выделить всё
Public Sub tTFNew(T As tTF)
ReDim T.Ar(TFSize - 1)
End Sub
Эту инициализацию можно случайно пропустить - получим ошибку. Я мог бы в типе указать сразу фиксированный размер массива, но VB6 не даёт задавать в типе фиксированный размер более 64 Кб, что крайне мало.
Тогда я решил завернуть массивы не в тип, а в класс. Но в классе нельзя сделать Public массив, приходится делать свойство для доступа к элементам массива. Защищенность повысилась, теперь массив инициализируется автоматически, но скорость упала в 35-40 раз, а для меня этот параметр очень важен.
Подскажите, есть ли ещё какой-то путь решения моей задачи, который я упустил?
Прилагаю тестовый проект: